需要帮助C ++中的双向链表

时间:2013-11-11 17:03:17

标签: c++ doubly-linked-list

我正在用c ++创建一个双向链表。代码看起来很好,但当我试图在列表中添加第二个节点时程序崩溃。 insert()函数有问题,但不知道如何解决它。

#include <iostream>
using namespace std;

class Node{
    int info;
    Node* next, *back;
    friend class LinkedList;
};

class LinkedList{
private:
    Node* head;
public:
    LinkedList();
    void print();
    void find(int, Node**, bool *);
    void insert(int);
    void remove(int);
    void destroylist();
    void modify(int, int);
    bool checkifempty();

};

LinkedList::LinkedList(){
    head=NULL;
}

void LinkedList::print(){
    Node* tmp;
    tmp=head;
    while(tmp!=NULL){
        cout<<tmp->info<<endl;
        tmp=tmp->next;
    }
}


void LinkedList::find(int key, Node** loc, bool *found){
    *loc = head;
    bool more=true;
    while((*loc)!=NULL && (*loc)->info)){

        *loc=(*loc)->next;


    }
    if (*loc==NULL)
    {
        *found=false;
    }
    else if ((*loc)->info==key){

        *found = true;
    }

}



void LinkedList::insert(int key){

    Node *NewNode,*loc=NULL;
    bool found;

    find(key,&loc,&found);
    //Creating NewNode
    NewNode=new Node;
    NewNode->info=key;
    //if list is empty
    if (checkifempty())
    {
        NewNode->next=NULL;
        head=NewNode;
    }
    //otherwise
    else
    {
        NewNode->back=loc->back;
        NewNode->next=loc;
        loc->back->next=NewNode;
        loc->back=NewNode;
    }
    //Connecting pointers to complete insertion


}

void LinkedList::remove(int key){
    Node* loc; bool found;
    find(key,&loc,&found);
    loc->back->next=loc->next;
    loc->next->back=loc->back;
    delete loc;
}

void LinkedList::destroylist(){
    Node* tmp;
    while(head!=NULL){
        tmp=head;
        head=head->next;
        delete tmp;
    }
}

bool LinkedList::checkifempty(){
    return (head==NULL?true:false);
}


int main(){
    LinkedList mylist;
    mylist.insert(10);
    mylist.insert(15);
    mylist.insert(11);
    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:2)

在插入功能中,检查从find检索的指针:

if (loc != NULL) {
  // insert pointer into non-empty list

find函数和从中检索的指针确实是问题所在,因为你不检查它是否返回了有效的指针。