我正在用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;
}
答案 0 :(得分:2)
在插入功能中,检查从find
检索的指针:
if (loc != NULL) {
// insert pointer into non-empty list
find
函数和从中检索的指针确实是问题所在,因为你不检查它是否返回了有效的指针。