要检查示例列表实现,我尝试了以下代码。但每当我试图显示结果时,它就会进入一个循环。我无法找到它出错的地方。
#include<stdio.h>
#include<stdlib.h>
typedef struct linkedlist
{
int data;
struct linkedlist *next;
}node;
int main()
{
int ch,num;
node *head=NULL;
head=(node *)malloc(sizeof(node));
node *new=NULL;
new=(node *)malloc(sizeof(node));
node *temp=NULL;
temp=(node *)malloc(sizeof(node));
printf("\n1.Insert to list");
printf("\n3.Display the list");
printf("\n Enter Choice->");
scanf("%d",&ch);
switch(ch)
{
case 1:printf("\n Enter data->");
scanf("%d",&num);
new->data=num;
new->next=NULL;
head->next=new;
break;
case 3: temp=head;
while(temp!=NULL)
{
printf("\n %d",temp->data);
temp=temp->next;
}
break;
default:printf("Wrong Choice");
break;
}
return 0;
}
答案 0 :(得分:1)
这里有两个错误。
case 3: temp=head;
这称为“内存泄漏”。我建议你更多地学习指针;他们似乎让你感到困惑。
答案 1 :(得分:1)
为什么我觉得这是一个家庭作业问题?
以下是一些提示:
head
已分配,但从未初始化,这是您开始打印的地方。坦率地说,我很惊讶它没有崩溃。
您的菜单允许您打印列表或输入一个数字,然后程序结束。我怀疑你正在输入一个数字,然后再次运行程序打印出列表。程序状态不会在运行之间保留。
答案 2 :(得分:0)
我可以看到以下问题:
1)您没有使用选项循环,因此用户只能在程序的每次运行中执行一项操作(插入或显示)。如果他选择插入则无法显示,如果他选择显示,则无法显示任何列表。
2)每次要在列表中插入新节点时,都需要创建一个新节点。目前,您只是更改同一节点的数据(由new指向)。