c语言链表,在函数appendnode当中p的值没有成功赋值给head请问是为什么,以及该如何解决

img

img

在函数appendnode当中p的值没有成功赋值给head请问是为什么,以及该如何解决


#include<stdio.h>
#include<stdlib.h>//需要使用malloc函数
typedef struct link{
    int data;
    struct link *next;
}link;//定义一个名为link的链表 
link *AppendNode(link* head);//传入头指针,传出头指针
void DisplayNode(link*head); 
void DeleteMemory(link*head);
int main()
{
    int i=0;
    char c;
    link*head=NULL;//定义指针先给他初始化为null 
    printf("do you want to append a new node(y/n)");
    scanf(" %c",&c);
    while (c=='y'||c=='Y')
    {
        head=AppendNode(head);
        DisplayNode(head);
        printf("do you want to append a new node(y/n)");
        scanf(" %c",&c);
        i++;
    }
    printf("%d nodes have been appended");
    DeleteMemory(head);//申请了内存在使用完之后一定要free掉 
    return 0;
}
link *AppendNode(link* head)
{
    link*p=NULL;
    link*pr=head;
    int data;
    p=(link*)malloc(sizeof(link));
    if(p==NULL)
    {
        printf("no enough memory to allocate\n");
        exit(0);
     } //如果没有分配到内存则结束程序
    if(head==NULL)
    {
        head=p;
      } //如果后面没有节点则将此节点设置为头节点
    else
    {
        while(pr->next!=NULL)
        {
            pr=pr->next;//移动指针使其达到最后一个节点的指针域 
        }
        pr->next=p;//pr已经移动到末尾的节点,此行让指针指向新分配的节点 
     } 
    printf("input node data:");
    scanf("%d",&data);
    p->data=data;
    p->next=NULL;//将新节点设置为末尾的节点
    return head;//返回头节点,之后所有的函数都会用到头节点 
}

void DisplayNode(link*head)
{
    
    link*p=head;
    int j=1;
    while(p!=NULL)
    {
        printf("%5d%10\n",j,p->data);
        p=p->next;
        j++;
     } 
}

void DeleteMemory(link*head)
{
    link*p=head;
    link*pr=NULL;
    while(p!=NULL)//注意NULL的打法 
    {
        pr=p;
        p=p->next;
        free(pr);
    }
}



 



整个输入输出截图过来看看