【问题标题】:Finding the right place to insert in a circular, doubly linked list在循环双向链表中找到插入的正确位置
【发布时间】:2013-10-22 20:44:37
【问题描述】:

我想将一些人的名字按字母顺序插入到一个循环双向链表中,但我最多只能添加三个,我不确定为什么会这样。我将要插入的新节点传递给insert 函数,创建指向它的指针,并循环遍历整个列表以找到正确的插入点。但是,当它的名称超过三个时,会删除一个节点并插入另一个节点。有人可以帮我解决这个问题吗?

其他细节:

  • 每个Node 都有两个指针,称为nextprev,还有一个称为datastring 作为数据成员
  • List 类包含插入和显示函数,以及指向虚拟头节点的头指针。当List被初始化时,这个头节点的nextprev指针指向它自己

这是我写的插入函数:

void List::insert(Node newObject)
{


    Node *toInsert = &newObject;
    Node *cur = head->next;

    while((cur != head) && (newObject.data > cur->data))
    {
            cout << "Is this loop entered?" << endl;
            cur = cur->next;

    }

    toInsert->next = cur;
    toInsert->prev = cur->prev;

    cur->prev = toInsert;
    toInsert->prev->next = toInsert;        

}

还有我的main.cpp

#include "list.h"
#include "node.h"

using namespace std;

int main()
{


    Node nikhil = Node("Nikhil");
    Node kaustubh = Node("Kaustubh");
    Node jon = Node("Jonathan");
    Node james = Node("James");
    Node elias = Node("Elias");
    Node kenny = Node("Kenny");

    List suiteMates;

    suiteMates.insert(nikhil);
    suiteMates.insert(kaustubh);
    suiteMates.insert(jon);
    suiteMates.insert(james);
    suiteMates.insert(elias);
    suiteMates.insert(kenny);

    suiteMates.display();
}

【问题讨论】:

    标签: c++ list pointers


    【解决方案1】:

    您的insert 函数插入了一个局部变量,当控制权超出该函数时,该变量超出了范围。稍后您尝试取消引用指向该消失对象的指针,即 Undefined Behavior

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      相关资源
      最近更新 更多