在双向链表的末尾插入

时间:2021-03-25 08:03:45

标签: c++ data-structures linked-list doubly-linked-list

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

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;

}

1 个答案:

答案 0 :(得分:0)

正如您所编码的那样,当您的 while 循环退出时,temp 保证为 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;
}