【问题标题】:Inserting at the end in doubly linked list在双向链表的末尾插入
【发布时间】:2021-03-25 08:03:45
【问题描述】:

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

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;

}

【问题讨论】:

  • 你有一个循环,上面写着while(temp!=NULL)。循环终止后temp 是什么?
  • 添加while(temp!=nullptr && temp->next!= nullptr) 作为循环终止条件。并将插入节点的前一个节点分配为newNode->prev=temp。你还需要考虑标题为空时的情况

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


【解决方案1】:

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

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

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;
}

【讨论】: