在 C++ 中实现链表时出现运行时(或可能是逻辑)错误
runtime ( or maybe logical ) error when implementing linked list in c++
链表是一种线性数据结构,其中每个元素都是一个单独的对象。列表的每个元素(我们称它为节点)由两项组成——数据和对下一个节点的引用。最后一个节点引用了 null。
所以我尝试在 C++ 中制作一个简单的链表(不是双重或循环),这是我的代码。我 运行 它与 xcode 语法没有问题。我添加了一个带有键 1 和数据 "asd" 的节点。我试图打印列表的元素,但我看到的是:(lldb)
有什么问题吗?
提前致谢。
#include <iostream>
#include <string>
using namespace std;
class node {
friend class linkedlist;
private:
int key;
string data;
node *next;
public:
node(int k,string d){
this->key=k;
this->data=d;
}
};
class linkedlist{
private:
node *head;
node *last;
public:
linkedlist(){
this->head=NULL;
this->last=NULL;
}
inline bool is_empty() {return head==NULL;}
void print(){
cout<<"\n";
node *current;
for(current=this->head;current!=NULL;current=current->next){
cout<<"("<<current->key<<","<<current->data<<")"<<" ";
}
cout<<"\n";
}
void insert(int k,string d){
node *new_node=new node(k,d);
this->last->next=new_node;
this->last=new_node;
if(this->is_empty()) this->head=new_node;
}
};
int main()
{
linkedlist *list=new linkedlist();
list->insert(1,"asd");
list->print();
return 0;
}
我没有分析列表实现,但也许这在主要方面很重要:list->insert(1, string("asd"));
在您的 insert
函数中,您正试图访问 NULL 对象:
this->last->next=new_node;
您的列表为空,即 head
和 last
为 NULL。
链表是一种线性数据结构,其中每个元素都是一个单独的对象。列表的每个元素(我们称它为节点)由两项组成——数据和对下一个节点的引用。最后一个节点引用了 null。
所以我尝试在 C++ 中制作一个简单的链表(不是双重或循环),这是我的代码。我 运行 它与 xcode 语法没有问题。我添加了一个带有键 1 和数据 "asd" 的节点。我试图打印列表的元素,但我看到的是:(lldb)
有什么问题吗?
提前致谢。
#include <iostream>
#include <string>
using namespace std;
class node {
friend class linkedlist;
private:
int key;
string data;
node *next;
public:
node(int k,string d){
this->key=k;
this->data=d;
}
};
class linkedlist{
private:
node *head;
node *last;
public:
linkedlist(){
this->head=NULL;
this->last=NULL;
}
inline bool is_empty() {return head==NULL;}
void print(){
cout<<"\n";
node *current;
for(current=this->head;current!=NULL;current=current->next){
cout<<"("<<current->key<<","<<current->data<<")"<<" ";
}
cout<<"\n";
}
void insert(int k,string d){
node *new_node=new node(k,d);
this->last->next=new_node;
this->last=new_node;
if(this->is_empty()) this->head=new_node;
}
};
int main()
{
linkedlist *list=new linkedlist();
list->insert(1,"asd");
list->print();
return 0;
}
我没有分析列表实现,但也许这在主要方面很重要:list->insert(1, string("asd"));
在您的 insert
函数中,您正试图访问 NULL 对象:
this->last->next=new_node;
您的列表为空,即 head
和 last
为 NULL。