我试图在C中遍历一个循环的单链接列表,但是它显示除了最后一个之外的所有元素......哪里有错误? 可能是在显示功能的其他部分条件发生改变的时候?但条件是什么? 显示和创建链接列表的功能是:
struct node
{
int data;
struct node *next;
}*last;
void create(int num)
{
struct node *t,*q;
t=(struct node*)malloc(sizeof(struct node));
t->data=num;
//list is empty
if(last==NULL){
last=t;
t->next=last;
}
else
{
t->next=last->next;
last->next=t;
last=t;
}
return;
}
void display()
{
struct node *q;
q=(struct node*)malloc(sizeof(struct node));
if(last==NULL){
printf("no items in the list");
return;
}
else{
q=last->next;
while(q!=last){
printf("%d\n",q->data);
q=q->next;
}
}
//return;
}
答案 0 :(得分:2)
您从last->next
开始打印,但q==last
时间内的情况会中断。因此,您不打印last
节点。
如果要执行else
部分,那么您知道列表中至少有一个节点。所以你可以将else部分改为:
q=last->next;
do{
printf("%d\n",q->data);
q=q->next;
}while(q!=last->next);
答案 1 :(得分:1)
last
也是一个有效的注释,你摆脱循环的方式很好。您应该在while循环后添加一些代码来打印last
节点。
答案 2 :(得分:1)
您不打印循环列表的最后一个节点。
添加
printf("%d\n",q->data);
在else
中display()
阻止后
或者在else块之后放置一个丑陋的printf,你可以考虑使用 做构造。
你不需要在display()中为q进行内存分配。 只是
struct node *q;
一定够了。因为你只持有遍历列表的指针。