求这段代码加注释 刚开始学

#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int info;
struct node* next;
}node,*link;

node* change(link head)
{
link p,q;
p = head;
head = NULL;
while(p)
{
q= p->next ;
p->next = head ;
head = p ;
p = q;
}
return head;
}
void display(link head)
{
link p;
p=head;
while(p)
{
printf("%d ",p->info);
p=p->next;
}
}
node *nizhuan(node *head)
{
node *q,*p;
p=NULL;
while(head!=NULL) //
{
q=p;
p=head;
head=head->next;
p->next=q;
}
return p;
}
main()
{
link head,r,s;
int m;
head=r=NULL;
printf("请输入数据,以0 结尾:\n");
scanf("%d",&m);
while(m!=0)
{
s= (link)malloc(sizeof(node)) ;//
s->info =m;
if(head==NULL)
head=s;
else
r->next = s ;//
r=s;
scanf("%d",&m);
}
if(r)
r->next=NULL;
printf("输入单链表数据如下:\n");
display(head);
printf("逆置单链表数据如下:\n");
head=change(head);
printf("\n");
display(head);
}

使用struct,通过指针连接了一个链表,然后定义了包括链表生成,赋值,反向的操作

#include <stdio.h>
#include <malloc.h>
typedef struct node                        ----------定义了链表的节点结构,将结构定义为类型
{
int info;                                        ------------链表的数据内容
struct node* next;                      ------------下一个链表节点的指针,使链表节点能连接起来
}node,*link;                        ------------定义节点结构类型为node,以及节点结构指针类型为link

node* change(link head)           ------逆置链表
{
link p,q;
p = head;
head = NULL;
while(p)
{
q= p->next ;
p->next = head ;
head = p ;                ------不断的修改节点,直到循环结束,head将指向尾节点,实现倒置
p = q;
}
return head;
}
void display(link head)      -----显示链表所有节点的数据内容 
{
link p;
p=head;
while(p)                            ---遍历链表,p为指向当前处理的节点指针
{
printf("%d ",p->info);
p=p->next;                  ---移动节点指针,指向下一个节点 
}
}
node *nizhuan(node *head)          ----链表逆转 --没用上,废的函数
{
node *q,*p;
p=NULL;
while(head!=NULL) //
{
q=p;
p=head;
head=head->next;
p->next=q;
}
return p;
}
main()
{
link head,r,s;          
int m;
head=r=NULL;
printf("请输入数据,以0 结尾:\n");
scanf("%d",&m);
while(m!=0)
{
s= (link)malloc(sizeof(node)) ;//构造新的节点 
s->info =m;
if(head==NULL)   ---如果头节点为空,则新节点为头节点 
head=s;
else
r->next = s ;    -----使用尾插法增加新节点,s始终指向当前最后一个节点 
r=s;
scanf("%d",&m);
}
if(r)
r->next=NULL;
printf("输入单链表数据如下:\n");
display(head);
printf("逆置单链表数据如下:\n");
head=change(head);
printf("\n");
display(head);
}