【发布时间】:2021-11-17 04:05:53
【问题描述】:
用 C 语言编写了一个反向循环单链表的程序,其中每个节点都应添加到列表的前面,但由于某种原因,所有后续节点都在此过程中丢失。无法确定这是代码编写中的逻辑缺陷还是某些错误/错字。 代码如下:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
int main()
{
struct node *start, *p;
int n;
printf("Enter length of list: ");
scanf(" %i", &n);
start = NULL;
for (int i = 0; i < n; i++)
{
p = malloc(sizeof(struct node));
printf("Enter data: ");
scanf(" %i", &p->data);
if (start == NULL)
{
p->next = start;
start = p;
}
else
{
p->next = start->next;
start = p;
}
}
p = start;
printf("List entered is: ");
for (p = start; p->next != start; p = p->next)
{
printf("%i\t", p->data);
}
printf("%i", p->data);
return 0;
}
【问题讨论】:
-
p->next = start->next;看起来不对。如果您考虑一下start指向的内容(以及下一行如何修改start),它应该是p->next = start; -
如果你添加到列表的前面,你不需要检查是否有任何节点。
p->next = start; start = p;可以使用任何一种方式,只要列表为空时start为 NULL。 -
我已将您对问题的编辑还原。请不要更正您问题中的代码以使其正常工作。它使答案看起来无关紧要。而是用接受标记标记提供修复的答案。这就是这个网站的运作方式。
标签: c data-structures linked-list circular-list