当前位置: 首页 > 知识库问答 >
问题:

在双链表尾部插入

越骏俊
2023-03-14

我第一次使用链表,必须创建一个可以在双链表末尾插入节点的函数。到目前为止我

void LinkedList::insertAtTail(const value_type& entry) {
    Node *newNode = new Node(entry, NULL, tail);
    tail->next = newNode;
    tail = newNode;
    ++node_count;
}

Node类按顺序接受要存储的值、要指向的下一个指针的值和上一个指针的值。每当我试图在这里插入节点时,我都会得到一个错误,说有一个未处理的异常,并且在写入位置0x00000008时有访问冲突。

我不完全确定这里出了什么问题,但我认为这与根据错误消息取消引用空指针有关。我真的很感激有人帮忙解决这个问题。

共有1个答案

丌官和泰
2023-03-14

尾部最初指向哪里?如果它是NULL,那么在尝试插入第一个元素时,您将取消引用一个空指针。

如果在取消引用tail之前测试它会有帮助吗?

void LinkedList::insertAtTail(const value_type& entry) {
    Node *newNode = new Node(entry, NULL, tail);
    if (tail)
        tail->next = newNode;
    tail = newNode;
    ++node_count;
}

如果tail为null,并且offsetoff(Node,next)为8,这将解释访问冲突,因为tail->next位于地址0x00000000+8处,即0x00000008,因此赋给tail->next将尝试在该地址写入内存,这正是您看到的错误。

 类似资料:
  • 我用C语言编写了双重链接列表的代码,它从头到尾的遍历很好,但从尾(end)到头的遍历陷入了无限循环,只打印最后一个节点的数据,我不知道出了什么问题。

  • 我试图在C中的双向链表上做插入排序。在这种状态下,我的代码让我陷入了一个没有结束的循环,吐出了8和9。 有人能好心解释一下“插入排序”方法是如何设计的吗? 我的链表是设计包含头,上一个,下一个和一些数据。 到目前为止这是我的代码 我的希望破灭了。请帮忙。

  • 我正在尝试为一个项目创建一个双链接列表容器。我不能使用任何std容器。必须对双链接列表进行排序。以下是我目前的代码: 我遇到的问题是在我的插入函数中。我正在使用调试器,并在以下行插入代码:list.insert(10);。 它正确地进入第一种情况,即head==nullptr并创建节点。当我进入下一行代码(list.insert(20))时,它会用这一行创建一个节点:node*node=newno

  • 我真的需要一些帮助来解决我已经努力了几天的地址簿程序。我正在用C语言处理双向链表。我试图在用户输入的位置将节点添加到列表中,从位置0开始。位置将不会被输入超出范围。(在位置0等位置之前,位置1没有插入)但是位置可以重复:将新节点插入在前一个位置占用者之前的位置。(例如:如果位置1有x,并且新节点插入位置1有y,则位置1现在有y,位置2有x) 我需要获取用户输入的位置号,并检索该位置的当前人员,但我

  • 我的程序不断崩溃。我觉得我的逻辑有问题。请帮忙!谢谢

  • 所以我遇到了一个问题。我知道那是什么。我就是想不出一个办法来解决这个问题。。 首先是我的尾部插入函数 如你所见。它很简单。如果头节点为空。它将新节点添加到头。如果不是。它一直移动头直到它达到空,然后它添加节点。这就是问题所在。我移动头节点指针,我不应该做。但我似乎想不出另一种方法来做。因为我在传递MY_QUEUE。我将包括头文件和声明,以了解这些是什么。 插入尾部函数是追加函数。我不能改变我的参数