Question

I am creating a doubly linked list in c++. code looks fine but when i tried to add second node in the list the program crashes. there is something wrong with insert() function but don't know how to resolve it.

#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;
}
Was it helpful?

Solution

In your insert function, check the pointer you retrieve from find:

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

The find function and the pointer you retrieve from it is really where the problem lies, because you do not check whether it has returned a valid pointer.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top