gpt4 book ai didi

c - 运行时错误 : Singly Link List program to insert a value

转载 作者:太空狗 更新时间:2023-10-29 15:14:03 26 4
gpt4 key购买 nike

我正在用 C 语言为“单链表”编写代码。在这段代码中,我想在列表的末尾插入元素。它编译得很好。但是在运行时,预期的输出没有出现。我使用 gcc 作为编译器。每当我在终端中执行 ./a.out 时,它就会被绞死。
这是代码:

#include<stdio.h>
#include<stdlib.h>
struct list
{
int node;
struct list *next;
};

void insert(struct list *, int);
void print(struct list *);

int main()
{
struct list *mylist;

insert(mylist, 10);
insert(mylist, 20);
insert(mylist, 30);
insert(mylist, 40);
insert(mylist, 50);
insert(mylist, 60);

print(mylist);
return 0;
}

void print(struct list *head)
{
if(head==NULL)
return;
else
{
while(head->next!=NULL)
{
printf("%d\t",head->node);
head=head->next;
}
}
}


void insert(struct list *head, int value)
{
struct list *new_node;
new_node = (struct list *)malloc(sizeof(struct list));

//node Creation
new_node->node=value;
new_node->next=NULL;

//Adding Node to list
if(head==NULL)
{
head=new_node;

}
else
{
while(head->next!=NULL);
{
head=head->next;

}
head->next=new_node;

}

}

insert() 是在 mylist 链表中插入元素的函数,print() 是打印链表中所有值的函数链接列表。请帮忙。我无法发现我犯了什么错误。

最佳答案

我建议再做一个改变,即函数的原型(prototype)应该是这样的

void insert(struct list **, int);
void print(struct list **);

并且 body 应该相应地改变。因为您已经在插入中完成了新的内存分配,所以您不应该按值传递,而应该按地址传递,这样它才能按预期工作。

此外,在 print 函数中,循环终止应该是 while(*head != NULL) 而不是 while((*head)->next != NULL) 否则它将跳过最后一个节点。

此外,您还应该在第一次调用插入函数后将第一个节点存储到一个 tmp 指针中,并且该 tmp 指针应该在最后传递到 print 函数中。在您的代码中,您将指针传递给最后一个错误的节点。所以,它应该是这样的。

int main()
{
struct list *mylist=NULL, *tmp = NULL;

insert(&mylist, 10);

tmp = mylist; /* here */

insert(&mylist, 20);
insert(&mylist, 30);
insert(&mylist, 40);
insert(&mylist, 50);
insert(&mylist, 60);

/* At this point mylist is pointing to last node, so pass tmp which stores the first node */
print(&tmp);
return 0;
}

关于c - 运行时错误 : Singly Link List program to insert a value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17988121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com