单链表添加元素失败,无法正常输出结果

问题遇到的现象和发生背景

单链表添加元素失败,无法正常输出结果

问题相关代码,请勿粘贴截图
#include 
#include 
typedef int DataType;
typedef struct node{
    DataType data;
    struct node *link;



}Node;
Node* initLinkList(){
    //创建头节点(无元素)
    Node* head=(Node*)malloc(sizeof(Node));
    if(head==NULL){
        return NULL;
    }
    head->link=NULL;
    return head;


}
void addNode(Node* h,DataType ele){
      if(h==NULL){
            printf("链表未初始化\n");
        return;
      }
      if(h->link==NULL){
            printf("你好\n");
         Node* newNode=(Node*)malloc(sizeof(Node));
         newNode->data=ele;
         newNode->link=h->link;
         h->link=newNode;

      }


}
void ergodic(Node *h){

    while(h->link!=NULL){
        printf("%d\n",h->data);

    }




}
int main(){
   Node * headNode=initLinkList();
   addNode(headNode,20);

   ergodic(headNode);


     return 0;
}


运行结果及报错内容

img

修改处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
typedef struct node{
    DataType data;
    struct node *link;
}Node;
Node* initLinkList(){
    //创建头节点(无元素)
    Node* head=(Node*)malloc(sizeof(Node));
    if(head==NULL){
        return NULL;
    }
    head->link=NULL;
    return head;
}
void addNode(Node* h,DataType ele){
      if(h==NULL){
            printf("链表未初始化\n");
        return;
      }
      //if(h->link==NULL){ 修改,这个判断加上只能实现加入一个结点
      //printf("你好\n");
      Node* newNode=(Node*)malloc(sizeof(Node));
      newNode->data=ele;
      newNode->link=h->link;
      h->link=newNode;
      //}                 //修改
}
void ergodic(Node *h){

    while(h->link!=NULL){
        printf("%d\n",h->link->data);//printf("%d\n",h->data);修改
        h = h->link;    // 修改
    }
}
int main(){
   Node * headNode=initLinkList();
   addNode(headNode,20);
   addNode(headNode,30);
   addNode(headNode,40);

   ergodic(headNode);

   return 0;
}

输出死循环了。循环中加h=h->link;

31行等号后面改为NULL

31 行,这里死循环:
newNode->link=h->link;
h->link=newNode;