C 最简单的链表创建和打印数据
下面是一个简单的C代码段,用于创建链表并打印列表中包含的所有元素 要求用户输入整数数据,直到输入零,表示用户输入终止;一旦数据保存在链表中,程序将打印列表中存储的所有元素,然后完成其执行 我不能让它运行,每次它给出一个“分段错误”错误,请检查并告诉我哪里错了(使用gcc 4.8.2) 代码:C 最简单的链表创建和打印数据,c,pointers,memory-management,data-structures,linked-list,C,Pointers,Memory Management,Data Structures,Linked List,下面是一个简单的C代码段,用于创建链表并打印列表中包含的所有元素 要求用户输入整数数据,直到输入零,表示用户输入终止;一旦数据保存在链表中,程序将打印列表中存储的所有元素,然后完成其执行 我不能让它运行,每次它给出一个“分段错误”错误,请检查并告诉我哪里错了(使用gcc 4.8.2) 代码: struct node { int data; struct node * next; }; struct node * createLinkedList() { int x;
struct node
{
int data;
struct node * next;
};
struct node * createLinkedList()
{
int x;
struct node * start;
start = NULL;
printf("Input 0 to end, Insert elements :\n");
for(scanf("%d", &x); x ;scanf("%d", &x))
{
struct node * temp = (struct node *) malloc(sizeof(struct node));
if (temp)
{
temp->data = x;
temp->next = NULL;
if(start == NULL) {
start = temp;
} else {
start->next = temp;
start = temp;
}
}
}
return start;
}
void printLinkedList(struct node * start)
{
if (start == NULL) {
printf("Linked List is empty!\n");
} else {
printf("\nPrinting Linked List : \n");
struct node * s;
s = start;
while(s != NULL)
{
printf("%d\n", s->data);
s = s->next;
}
}
}
int main(int argc, char const *argv[])
{
struct node * start;
start = NULL;
start = createLinkedList();
printLinkedList(start);
return 0;
}
这部分代码
if(start == NULL) {
start = temp;
} else {
start->next = temp;
start = temp;
}
这是无效的。一定有
if(start == NULL) {
start = temp;
} else {
temp->next = start;
start = temp;
}
您还需要一个删除列表中所有节点的函数。只需查看for循环。。。OMG将其更改为while(x!=0)+在适当的位置添加scanf(“%d”、&x);O/pUse中没有更改您的友好的邻居调试器(或gdb),并告诉我们(和您自己),哪一行生成异常。对您来说,这样做比我们容易得多,因为您已经有了代码、环境等。