2

その要素のアドレスが指定されているリンクリストから要素を削除する必要があります。このようなもの

1->2->3->4->5 a1 a2 a3 a4 a5 ここで、a1、a2..a5 はそれぞれ要素 1、2..5 のアドレスです。指定されたリストのヘッダーにアクセスできないため、 sum1 は delete(a3) N と言うだけです。リンクされたリスト全体をトラバースして、アドレスを要求されたアドレスと比較することはできません。

質問は、他の情報を指定せずに、指定されたリストから特定の要素を削除する方法です。

4

4 に答える 4

3

古典的なインタビューの質問.

その要素を削除するのではなく、次の要素をその要素にコピーします。

そうしたらいい:

  • a3 = a4
  • a4を削除
于 2012-06-03T10:53:54.113 に答える
1

this can only work if you don't receive the last value of the list:

void delete(pointerType x)
{
if (x->next == null) return;//this algorithm won't work

//in any other case:
x->value = x->next->value;
pointerType toDelete = x->next;
x->next = x->next->next;
delete toDelete;
}
于 2012-06-03T10:59:10.787 に答える
0

次の 2 つの理由によります。

  • 2->next へのアクセス権がありません。つまり、単純に要素 3 を削除することはできません。
  • リストが非常に長い場合、リストを配列のように扱うことは悪い考えです。

地域規模で取り組む必要があります。私の言葉での解決策は次のとおりです。

  1. a4 を a3 に割り当てます (つまり、2->next は a4 で、新しい a3->next = a5)。
  2. 古いa4を削除します

それが役立つことを願っています。

于 2012-06-03T11:07:28.687 に答える
0
as you don't have header of list you can't traverse list
but you are provided with node to delete
so you can copy next node into it and delete next node

suppose a1 -> to delete
if(a1 && a1->next)
{
   a1=a2;
delete a1;
} 
else if(a1)
{
   delete a1;
}
else
 return NULL;
于 2012-09-14T05:35:07.167 に答える