微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在双向链表的末尾插入

如何解决在双向链表的末尾插入

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。