需要帮助在C ++中为链接列表创建插入方法

时间:2014-04-15 02:37:17

标签: c++ list linked-list insertion

所以我试图在C ++中创建一个Linked List类,并且我在插入新元素时遇到了麻烦。我试图以这样的方式插入它们,在任何时候链接列表将始终按升序排列,我相信它称为插入排序。无论如何,我的插入方法存在问题,如果我尝试插入多个元素,我的getNext方法会出现一些错误,它只是获取指向列表中下一个节点的指针。如果我只是一个接一个地插入数据,我的程序工作正常,但由于某种原因,这给了我问题,任何想法可能是什么?

插入方法:

void insert(int data){
    ListNode *NewNode = new ListNode(data, NULL);
    ListNode *temp = Head;
    if(Head -> getNext() == NULL){
        Head -> setNext(NewNode);
        cout<<data<<" has been inserted"<<endl;
    }
    else{
        while((temp -> getNext() != NULL) || (temp -> getNext() -> getData() < data)){
            temp = temp -> getNext();

        }
        if(temp -> getData() == data){
                cout<<"Data is already in list"<<endl;
                return;
            }
        if(temp -> getNext() != NULL){
            temp ->setNext(NewNode);
            cout<<data<<" has been inserted"<<endl;
            return;
        }
        if(temp -> getNext() -> getData() > data){
            NewNode -> setNext(temp -> getNext());
            temp ->setNext(NewNode);
            cout<<data<<" has been inserted"<<endl;
            return;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

首先,修复此if(Head -> getNext() == NULL)。这不包括从空列表开始的可能性,因此请检查Head == NULL是否为true,如果为true,则新节点将变为Head。

不看其余的代码,你的while循环条件是错误的。循环将一直运行,直到下一个节点为NULL,因为检查数据会短路。尝试使用和运算符。

while((temp -> getNext() != NULL) && (temp -> getNext() -> getData() < data))

如果下一个节点为NULL或下一个节点的数据大于试图添加的数据,则停止循环。循环完成后,您必须插入逻辑以确定它是什么情况。