gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:05:07 24 4
gpt4 key购买 nike

我正在用 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;
}

最佳答案

在您的插入函数中,检查您从 find 中检索到的指针:

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

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

关于c++ - 需要帮助 C++ 中的双向链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19911860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com