我必须编写一个方法来删除List中的最后一个节点。你们有什么想法我应该如何解决这个问题吗?
答案 0 :(得分:2)
如果你有一个单链表,你别无选择,只能遍历整个列表到最后一个节点,保持指向前一个节点的指针,这样你就可以在释放最后一个节点时重置它的next
字段。节点:
if (head)
{
node *curNode = head;
node *prevNode = NULL;
while (curNode->next)
{
prevNode = curNode;
curNode = curNode->next;
}
if (prevNode) prevNode->next = NULL;
delete curNode;
}
如果您使用的是双链表,这会更容易,因为您可以保留指向列表中最后一个节点的指针,并直接对其进行操作:
if (head == tail)
{
delete head;
head = tail = NULL;
}
else if (tail)
{
node *curNode = tail;
tail = curNode->previous;
tail->next = NULL;
delete curNode;
}
当然,如果你真的在使用C ++,那么你应该使用STL的std::list
(双链接)或std::forward_list
(单链接)容器来处理这些容器详细信息。
答案 1 :(得分:0)
要删除列表中的最后一个元素,您需要做的就是维护两个单独的节点。最初应该指向列表的头部,而另一个应该指向列表中的第二个元素。您应该执行以下操作:
if(head == NULL)
return 0;
else if(head->next == NULL){
Node *temp = head;
delete temp;
head = NULL;
}
else{
Node *one = head;
Node *two = head->next;
while(two->next != NULL){
two = two->next;
one = one->next;
}
one->next = NULL;
delete two;
}