c语言编写了个链表,但无法正确的输出,求大神指导

链表方面一直不是特别清楚。自己编了个链表,但却无法正确输出,求大神帮忙

#include
#include

typedef struct lnode Lnode;
struct lnode
{
int data;
Lnode *next;
};
Lnode *makeNode(int data)
{
Lnode *new_node=(Lnode *)malloc(sizeof(Lnode));
if(new_node==NULL)
{ printf("error");
exit(1);
}
else
{ new_node->data=data;
new_node->next=NULL;
}
return(new_node);
}

Lnode *insert(Lnode *new_node,Lnode *head)
{
Lnode *pre_node=NULL;
if(pre_node==NULL)
{
head=new_node;
pre_node=head;
}
else
{
pre_node->next=new_node;
pre_node=pre_node->next;
}
return(head);
}
void printlist(Lnode *head)
{
Lnode *node=head;
while(node!=NULL)
{
printf("%c",node->data);
node = node->next;
}
printf("\n");
}
int main()
{
Lnode *list=NULL;
Lnode *node;
int ch;
while(ch=getchar()!=EOF)
{
if(ch=='\n')
{
printlist(list);
}
else
{
list=insert(makeNode(ch),list);
}

}
return 0;

}

insert函数第一行代码赋值为空,紧接着又判断是否为空?如果这一行不是错误,那么意图是什么?


#include<stdio.h>

typedef struct lnode Lnode;
struct lnode{
    int data;
    Lnode *next;
};
Lnode *makeNode(){

    Lnode *head, *new_node;// head相当于你的list
    char ch;

    head = NULL;
    printf("依次输入字符数据(‘#’表示输入结束):\n");
    ch = getchar();
    while(ch != '#')
    {
        new_node = (Lnode*)malloc(sizeof(Lnode));
        new_node->data = ch;
        new_node->next = head;
        head = new_node;
        ch = getchar();             //头插法算法简单 核心就两句p->next = head;head = p;
    }
    return head;


  //  Lnode *new_node=(Lnode *)malloc(sizeof(Lnode));
  //  if(new_node==NULL){
   //         printf("error");
  //          exit(1);
  //  }

    //     new_node->data=data;
    //     new_node->next=NULL;

   // return(new_node);
}

Lnode *insert(Lnode *new_node,Lnode *head){

    Lnode *pre_node=NULL;
    if(pre_node==NULL){
        head=new_node;
        pre_node=head;
    }


        pre_node->next=new_node;
        pre_node=pre_node->next;

        return(head);
}
void printlist(Lnode *head){
    Lnode *node=head;

    while(node!=NULL){
        printf("%c",node->data);
        node = node->next;
    }
    printf("\n");
}
int main(){

    Lnode *list=NULL;
    //Lnode *node;
    int ch;

while(1)
    {
        printf("单链表的创建\n");
        printf("1.使用头插法创建单链表\n");
        printf("2.使用尾插法创建单链表\n");
        printf("3.链表输出显示\n");
        printf("4.退出\n");
        printf("做出选择:\n");
        scanf("%d",&ch);
        switch(ch)
        {
        //头插法
        case 1:
            list = makeNode(); // 直接把新节点就挂到链表上了。。
            break;
        //尾插法
        case 2:
            printf("你自己实现!");
        //输出链表
        case 3:
            printlist(list);
            break;
        //退出程序
        case 4:
            return 0;
            break;
        default:
            break;
        }
    }



//    while(ch=getchar()!=EOF){
//printf("hahahha");
//        if(ch=='\n'){
//            printf("hhhh");
//            printlist(list);
//                }
//        else{
//            list=insert(makeNode(ch),list);
//            }
//        }//while
//        return 0;

}


你理解有问题。。改好了。。