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

当指针为空并删除它时,您将退出循环。那是行不通的。

我猜你的意思是删除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,但您必须格外小心,以确保current在它等于 时不取消引用NULL

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

编辑:您编辑的代码在很大程度上模仿了我的答案,除非您的代码在head == NULL. 如果列表只有一个节点,它也会失败,因为temp它将保持未分配状态。

于 2012-12-06T18:09:32.203 回答