1
node *head, *current, *temp;
current = head;
while(NULL != current){
  temp = current;
  current = current->next;
}
delete current;
current = temp;
current->next = NULL;

すでにリンクされたリストがあり、リストにノードがいくつあるかわからないと仮定すると、このようなものがあり、再帰があることを知っているのではないかと思っています。

削除とは、割り当て解除を意味します。

node *head, *current, *temp;
current = head;
while(NULL != current->next){
  temp = current;
  current = current->next;
}
if (NULL != current){
delete current;
current = temp;
current->next = NULL;
}
4

3 に答える 3

1

ポインタがnullのときにループを終了し、それを削除します。それはうまくいきません。

temp代わりに削除するつもりだったと思いますか?それでも現在のコードでは機能しません。

于 2012-12-06T18:09:14.260 に答える
1

あなたはこのようなことを意味しましたか?

while (NULL != next) {
  prev = current;
  current = next;
  next = current->next;
}
delete current;
if (NULL != prev) {
  prev->next = NULL;
}
于 2012-12-06T18:12:34.327 に答える
0

コードは何もしません。ループの終了条件はです。これは、常にに渡されることをNULL == current意味します。これは問題ありませんが、割り当てを解除することはありません。delete current;NULLdelete

ループを変更して次の場合に停止する必要がありますが、次の値に等しい場合はcurrent->next == NULL逆参照しないように特に注意する必要があります。currentNULL

temp = 0;
while(current && current->next){
    temp = current;
    current = current->next;
}
if (temp) {
    delete current;
    temp->next = 0;
}

編集:あなたの編集されたコードは、私の答えをかなり模倣していますが、あなたのコードは失敗するでしょうhead == NULL。リストにノードが1つしかない場合も、temp割り当てられないままになるため、失敗します。

于 2012-12-06T18:09:32.203 に答える