这段代码有什么错误?

时间:2013-12-08 04:00:29

标签: c

可执行文件突然停止工作。整个批次都有效,但是链接列表的反转部分会使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.
}

2 个答案:

答案 0 :(得分:1)

您拥有:*p=startstart=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;