可执行文件突然停止工作。整个批次都有效,但是链接列表的反转部分会使exe文件这样做。
#include<stdio.h>
#include<stdlib.h>
struct node{
int info;
struct node *link;
} *start=NULL;
main()
{
int i=1,n,data;
printf("\nEnter the number of nodes you want to enter: ");
scanf("%d",&n);
printf("\nEnter the key no. 1: ");
scanf("%d",&data);
struct node *p=start,*tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=NULL;
start=tmp;
while(i<n)
{
printf("\nEnter the key no. %d: ",(i+1));
scanf("%d",&data);
while(p!=NULL)
p=p->link;
tmp->info=data;
tmp->link=NULL;
p=tmp;
i++;
}
p=start;
printf("\nThe list is: ");
while(p!=NULL)
{
printf("%d ",p->info);
p=p->link;
}
p=start;
printf("\nThe reversed list is: ");
while(p->link->link!=NULL)
{
p->link->link=p;
p=p->link;
}
start->link=NULL;
start=p->link;
for(p=start;p!=NULL;p=p->link)
printf("%d",p->info);
getch();
return 0; //main shourl return.
}
答案 0 :(得分:1)
您拥有:*p=start
,start=NULL
,然后是while(p!=NULL) p=p->link;
。
永远不会发生,因为p
为空:)
答案 1 :(得分:0)
您的程序非常容易出错
最初start==NULL
和陈述1
struct node *p=start,*tmp=(struct node *)malloc(sizeof(struct node));
这将使 p等于NULL
然后声明2:
start=tmp;
这会更新开始,但不会更新 p
你应该打破声明1
struct node *tmp=(struct node *)malloc(sizeof(struct node));
//processing tmp
struct node *p=start=tmp
另外
//at time of insertion
while(p!=NULL)
p=p->link;
tmp->info=data;
tmp->link=NULL;
p=tmp;
当 NULL 时,明确地看 while循环, p 将退出循环,那么你的是添加到p=tmp
(将tmp指定为null)这是非法的。
你应该这样做
while(p->link!=NULL)
p=p->link;
tmp->info=data;
tmp->link=NULL;
p->link=tmp;