首先引入头文件,定义结构体:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;
//定义节点类型
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
(1)、创建链表
头插法:链表的逻辑顺序与结点的插入顺序相反,即逆序。从一个空表开始,反复的读入数据,生成结点放到链表中,注意这里是插入到当前链表的表头之后,如下图:

创建方法如下:
//单链表的建立(头插法建立)
LinkList CreateLinkList_H()
{
LNode *L;
ElemType x;
//申请头结点的空间
L=(LNode *)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=-1)
{
LNode *p;
p=(LNode *)malloc(sizeof(LNode));//申请新节点的空间
p->data=x;
p->next=L->next;
L->next=p;
scanf("%d",&x);
}
return L;
}
尾插法:线性表的逻辑顺序与节点的插入顺序相同,将新节点插入到当前链表的链尾上,为此必须加上一个尾指针指针p使其一直指向当前链表的尾结点。如图

创建方法如下:
//单链表的建立(尾插法建立)
LinkList CreateLinkList_T()
{
LNode *L,*r,*p;
ElemType x;
L=(LNode *)malloc(sizeof(LNode));
L->next=NULL;
r=L;
scanf("%d",&x);
while(x!=-1)
{
p=(LNode*)malloc(sizeof(LNode));
p->data=x;
p->next=r->next;
r->next=p;
r=p;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
原文:http://www.cnblogs.com/helloworldcode/p/6688554.html