我正在尝试使用以下代码实现链接列表,我收到了段错误,请告诉我问题出在哪里。
我使用的是ubuntu gcc编译器,请给我一些建议
#include<iostream>
using std::cout;
using std::cin;
class ll
{
struct node
{
int info;
node *nextnode ;
}*n;
public:
ll()
{
n=NULL;
}
void getinfo()
{
node *temp,*r;
if( n==NULL )
{
temp=new node;
cout<<" \n enter the first elements of linklist \n";
int z;
cin>>z;
//i guess problem starts here
temp->info=z;
cout<<"the value of info is";
temp->nextnode = NULL;
n=temp;
}
else{
temp=n;
cout<<"heheh balls";
while(temp->nextnode==NULL)
{
temp=temp->nextnode;
}
r=new node;
cout<<"enter the element \t";
int y;
cin>>y;
r->info=y;
r->nextnode=NULL;
temp=r;
}
}
void display()
{
node *temp=n;
while(temp->nextnode==NULL)
{
cout<<temp->info;
}
}
};
int main()
{
ll p;
int v;
cout<<"enter the number of elements to be added to linklist \t";
cin>>v;
//tryn to input linklist from terminal
for(int i=0;i<v;i++)
{
p.getinfo();
}
p.display();
return 0;
}
答案 0 :(得分:2)
while(temp->nextnode==NULL)
{
temp=temp->nextnode;
}
....
temp=r;
应该是
while(temp->nextnode!=NULL)
{
temp=temp->nextnode;
}
....
temp->nextnode=r;
同样适用于:
void display()
{
node *temp=n;
while(temp->nextnode==NULL)
{
cout<<temp->info;
}
}
应该是:
void display()
{
node *temp=n;
while(temp!=NULL)
{
cout<<temp->info;
temp = temp->nextnode;
}
}
答案 1 :(得分:2)
代码中有几个错误,如下所示:
void
getinfo ()
{
node *temp, *r;
if (n == NULL)
{
temp = new node;
cout << " \n enter the first elements of linklist \n";
int z;
cin >> z;
//i guess problem starts here
temp->info = z;
cout << "the value of info is";
temp->nextnode = NULL;
添加下一行,你必须将头指向第一个元素。
n = temp;
继续......
}
else
{
temp = n;
cout << "heheh balls";
在这里你应该迭代,而是下一个元素,将==
更改为!=
。
while (temp->nextnode != NULL)
继续......
{
temp = temp->nextnode;
}
r = new node;
cout << "enter the element \t";
int
y;
cin >> y;
r->info = y;
r->nextnode = NULL;
temp->nextnode = r;
}
}
下一个功能:
void
display ()
{
node *temp = n;
下一行已更改,请在您拥有节点时保持打印数字
while (temp)
{
cout << temp->info;
不要忘记移动到下一个节点
temp = temp->nextnode;
}
}
就是这样,它有效。