无法遍历链表,无法弄清楚我的方法有什么问题?
Not able to traverse linked list, can't figure out whats' wrong in my approach?
#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 creation\n";
int choice;
cout<<"To add a node press 1,\nTo view your list press 2\n";
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;
}
}
另外你的classLinkedList
不跟在The Rule of Three之后,所以复制对象时指针也被复制,这可能会引起麻烦。多开发程序要小心
还有一点就是你的main()
只能做节点插入和打印其中之一,所以你不能打印添加节点的LinkedList
。
您可能需要这样的循环:
int main(){
LinkedList l;
cout<<"Welcome to Linkedlist creation\n";
int choice;
for(;;){
cout<<"To add a node press 1,\nTo view your list press 2\n";
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();
}
}
}
#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 creation\n";
int choice;
cout<<"To add a node press 1,\nTo view your list press 2\n";
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;
}
}
另外你的classLinkedList
不跟在The Rule of Three之后,所以复制对象时指针也被复制,这可能会引起麻烦。多开发程序要小心
还有一点就是你的main()
只能做节点插入和打印其中之一,所以你不能打印添加节点的LinkedList
。
您可能需要这样的循环:
int main(){
LinkedList l;
cout<<"Welcome to Linkedlist creation\n";
int choice;
for(;;){
cout<<"To add a node press 1,\nTo view your list press 2\n";
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();
}
}
}