#include<iostream>
using namespace std;
struct node{
int data; // structure for each node of list
node *p;
};
class LinkedList{
node *head,*tail;
public:
LinkedList(){ //empty LinkedList used for overall structure
head=NULL;
tail=NULL;
}
void addnode(int x);
void show();
};
void LinkedList::addnode(int x){
node *temp=new node;
temp->data=x;
temp->p=NULL;
if(head==NULL){ //linkedList is empty therefore temp is both head and tail now
temp=head;
temp=tail;
}
else{
tail->p=temp;
tail=temp;
}
}
void LinkedList::show(){
node *temp;
temp=head;
while(temp!=NULL){
cout<<endl<<temp->data<<endl;
temp=temp->p;
}
}
int main(){
LinkedList l;
cout<<"Welcome to Linkedlist creationn";
int choice;
cout<<"To add a node press 1,nTo view your list press 2n";
cin>>choice;
switch(choice){
case 1:
int data;
cout<<"Enter the data to be added: ";
cin>>data;
l.addnode(data);
break;
case 2:
l.show();
}
}
请告诉我我的代码出了什么问题。。!我需要了解我的方法有什么错。。。我参考了许多其他来源,大多数都和我的一样,但show((根本不起作用。。。请不要直接转到其他帖子,或者在做之前告诉我我的错误。。
编辑时间:对不起大家的错别字,我的意思是相同的if(head==null(和not=;我检查了我的代码,它只是在这里错了,仍然是相同的问题
您的LinkedList::addnode
有以下错误:
if(head=NULL){
中的条件错误。=
是C++中的赋值运算符,它将把head
设置为NULL
,并将被求值为false
。这将使tail->p=temp;
与tail = NULL
同时出现,并将导致分段故障temp=head; temp=tail;
也是错误的。它正在用某种东西覆盖指向新创建节点的指针,从而造成内存泄漏
函数应该是:
void LinkedList::addnode(int x){
node *temp=new node;
temp->data=x;
temp->p=NULL;
if(head==NULL){ //linkedList is empty therefore temp is both head and tail now
head=temp;
tail=temp;
}
else{
tail->p=temp;
tail=temp;
}
}
此外,您的类LinkedList
不遵循三规则,因此在复制对象时会复制指针,这可能会造成问题。当你进一步开发你的程序时要小心。
还有一点是,您的main()
只能执行节点插入和打印中的一项,因此无法在添加节点的情况下打印LinkedList
。你可能想要一个这样的循环:
int main(){
LinkedList l;
cout<<"Welcome to Linkedlist creationn";
int choice;
for(;;){
cout<<"To add a node press 1,nTo view your list press 2n";
if(!(cin>>choice))break; // exit when reading failed
switch(choice){
case 1:
int data;
cout<<"Enter the data to be added: ";
cin>>data;
l.addnode(data);
break;
case 2:
l.show();
}
}
}