c++ - 删除最后一个节点,并将尾部更新到最后一个节点
问题描述
我想删除链接列表中的最后一个节点,但似乎我做错了什么,因为没有元素被删除。
void deleteTail(){
node *temp = head;
int iterator = 1;
if (head == NULL)
{
cout<<"Nothing to be deleted."<<endl;
}
else if (head == tail)
{
temp = head;
delete(temp);
head = NULL;
tail = NULL;
}
else
{
while(temp->next != NULL){
temp = temp -> next;
}
tail = temp;
temp = temp->next;
delete(temp);
}
}
如果链表是 1->2->3->4->5->NULL,我希望它变成 1->2->3->4->NULL。我在我的代码中做错了什么?提前致谢!
解决方案
这应该可以完成这项工作。
while (temp->next != NULL && temp->next->next != NULL) {
temp = temp->next;
}
tail = temp;
delete temp->next;
temp->next = NULL;
问题出在循环的末尾,temp
指向最后一个元素。之后,您将设置temp
为temp->next
,或者换句话说,设置为NULL
。之后你打电话delete
过来NULL
,什么都不做。
编辑:当然,这进入了最后一个else
块。