首页 > 解决方案 > 在双向链表的末尾插入

问题描述

**以下是我的链表代码...由于某种原因它无法正常工作。有人可以帮我吗?

void insertAtTheEnd(node *&head, int data){
    node *newNode= new node(data);
    newNode->data=data;
    node *temp=head;
    while(temp!=NULL){
        temp=temp->next;
    }
    temp->next=newNode;
    newNode->next=NULL;
    newNode->prev=temp->next;

}

标签: c++data-structureslinked-listdoubly-linked-list

解决方案


当您对其进行编码时,temp当您的 while 循环退出时,它保证为 NULL。因此,temp->next=NULL会崩溃。

当您探测列表中的位置时,您通常需要保留“上一个”变量以指向您正在迭代的项目之前的项目。

node* temp = head->next;
node* previous = head;

while (temp)
{
    previous = temp;
    temp = temp->next;
}
// when the while loop returns, `previous` is the last element in the list
previous->next = newNode;
newNode->prev = previous;
newNode->next = nullptr;

您在代码中缺少的另一种情况。何时head为 NULL(空列表),您需要更新head为您的newNode

// empty list - return the new node as head
if (head == nullptr)
{
    newNode->next = nullptr;
    newNode->prev = nullptr;
    head = newNode;
    return;
}

推荐阅读