c++ - 在双循环链表的末尾插入节点

标签 c++ doubly-linked-list circular-list

我正在编写一个程序来对双循环链表执行各种操作。所有其他函数都工作正常,但在努力尝试之后,我不知何故无法理解为什么我的程序在执行 insert_end() 函数时被终止。函数是:

    void list::insert_end()
     {  int data;
         node*temp,*p;
         if(start==NULL)
        cout<<"CREATE list first!:"<<endl;
        else
        { cout<<"enter data to enter in a node after the last node:"<<endl;
          cin>>data;
          temp=new node(data);
          while(p->next!=start)
         { p=p->next;
         } // now p points to last node of doubly,circular list!! i.e. the linked list is traversed till p's next pointer points to start
           temp->pre=p;
          temp->next=p->next;
          p->next->pre=temp;
          p->next=temp;
          display();
        }
      }

这是一个菜单驱动程序。

请帮助我了解 insert_end 函数......我是初学者......

最佳答案

你有一个未初始化的指针 p 在这里声明:

node*temp,*p;

尽管没有将它设置为任何值,但您在这里取消引用它:

while(p->next!=start)

也许您想添加 p=start; 使其从第一个节点开始。

请注意,如果您有一个双向链接的循环列表,则不需要循环来查找最后一个节点:最后一个节点是第一个节点之前的节点,即 start->pre.

关于c++ - 在双循环链表的末尾插入节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18769013/

相关文章:

java - 遍历双向链表时如何跳过空虚拟节点

c++ - 用更合适的类替换 `std::vector`

Java循环链表 headless 无尾?

c++ - 更改数字精度

c++ - 忽略调试器中的默认库

c++ - 我怎样才能让编译时 const 对象配置有可变长度的数据 block ?

c++ - (C++) 双向链表模板 - 访问问题

c++ - 如何检测插入/插入Oculus触摸 Controller ?

c - 在循环链表中查找最大值和最小值时出错

list - 方案流和循环列表