回 帖 发 新 帖 刷新版面

主题:请各位帮忙看看,这个建链表的程序为何正运行着,会中断跳出?

#include<stdio.h>
#include <stdlib.h>
struct link
{int data;
 struct link *next;
};
struct link *Append(struct link *head)
{
    struct link *p=NULL;
    struct link *pr=head;
    int data;
    p=(struct link *)malloc(sizeof(struct link));
    if(p==NULL)
    {printf("NO enough memory to alloc");
    exit(0);
}
   if(head==NULL)
   {head=p;}
   else
   {
       while (pr->next !=NULL)
   {pr=pr->next;
   }
   pr->next=p;
   }
   pr=p;
   printf("input node data:");
   scanf("%d",&data);
   pr->data=data;
   pr->next=NULL;
   return head;
}


main()
{int i;
char c;
struct link *head=NULL;
printf("do you want to append a new node?");
scanf("%c",&c);
i=0;
while(c=='Y')
{
    head=Append(head);
    printf("do you want to append a new node");
    scanf("%c",&c);
    i++;
}
printf("%d new nodes have been appended!",i);
}

回复列表 (共3个回复)

沙发

建议先用书上的模板,下面的程序仅供参考:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct link
{
    int data;
    struct link *next;
};

void Append(struct link **head,struct link **p)
{
    int n;
    struct link *pr;
    pr=(struct link *)malloc(sizeof(struct link));
    (*p)=(struct link *)malloc(sizeof(struct link));
   (*p)=(*head)->next;
    printf("input node data:\n");
    scanf("%d",&n);
    pr->data=n;
    if(!(*p))
    {
        (*head)->next=pr;
        (*head)->next->next=NULL;
        return;
    } 
    while((*p)->next!=NULL)
    {
         (*p)=(*p)->next;
    }
    (*p)->next=pr;
    (*p)->next->next=NULL;
}

int main()
{    
    int i=0;
    struct link *head;
    head=(struct link *)malloc(sizeof(struct link));
    head->next=NULL;
    struct link *p;
    while(i<5)
    {
        Append(&head,&p);
        i++;
    }
    p=head->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    system("pause");
    return 0;
}

板凳

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct link
{
    int data;
    struct link *next;
};

void Append(struct link **head,struct link **p)
{
    int n;
    struct link *pr;
    pr=(struct link *)malloc(sizeof(struct link));
    (*p)=(struct link *)malloc(sizeof(struct link));
    (*p)=(*head)->next;
    printf("input node data:\n");
    scanf("%d",&n);
    pr->data=n;
    if(!(*p))
    {
        (*head)->next=pr;
        (*head)->next->next=NULL;
        return;
    } 
    while((*p)->next!=NULL)
    {
         (*p)=(*p)->next;
    }
    (*p)->next=pr;
    (*p)->next->next=NULL;
}

int main()
{    
    int i=0;
    struct link *head;
    head=(struct link *)malloc(sizeof(struct link));
    head->next=NULL;
    struct link *p;
    while(i<5)
    {
        Append(&head,&p);
        i++;
    }
    p=head->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    system("pause");
    return 0;
}

3 楼

注意scanf,注意缓冲区、、

我来回复

您尚未登录,请登录后再回复。点此登录或注册