链表一直不太会,求大神解答(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)
{
if(head==NULL)
{
head=new_node;
}
else
{
head->next=new_node;
}
return(head);
}
void printlist(Lnode *head)
{
Lnode *node=head;
while(node!=NULL)
{
printf("->%d",node->data);
node=node->next;
}
printf("\n");
}
int main()
{
Lnode *list=NULL;
Lnode *node=head;
int ch,i;
while(ch=getchar()!=EOF)
{
if(ch=='\n')
{
printlist(list);
}
else
{
list=insert(makenode(ch),list);
}

}
printflist(list);
return 0;

}

有一些拼写错误,head未定义,struct定以后要加分号。

看代码,你应该是创建一个链表,存入一堆数,然后一个个输出来。这不是一个很复杂的问题,而你写得这么复杂,很乱,让人很难读懂。我初步发现,你的程序有一个错误。那就是你的链表长度只有一个节点!虽然你希望是跟你输入的数据一样多。原因在于insert函数,你传入list指针,如果为空指针,则将创建的节点的指针返回给list。这没错,这算是创建了第一个节点!如果list不为空指针,那么是不是应该将新节点的指针存入它的指针域next,并且将新节点的指针赋值给list(返回新节点的指针值)?只有这样,多次执行insert函数时,才能将链表链接起来吧!所以嘛,在insert函数内部,那个head->next=new_lnode语句之后再加一句head=head->next或者head=new_lnode。至于其他错误嘛,没有仔细深究了。

编译不过,很可能是语法问题哦。可能是少了一些符号,或者多了一些符号什么的。仔细看看