单链表分为带头结点的和不带头结点的,两者的根本区别在于是否有不存储元素的头结点。头结点的存在可以让链表为空的时候不销毁,操作也更方便,不用附带二级指针。
表示形式
每一个结点都有指针域和数据域,指针域用来指向下一个结点,数据域用来存放该结点的元素。
基本操作
单链表的基本操作有初始化、前插、后插、前删、后删等。后面我们将讲述基于这些基本操作上更复杂的操作。
1.初始化
typedef int LNdataType;
typedef struct ListNode{
struct ListNode*next;
LNdataType data;
}LT,*Link;
void InitList(Link phead){
if(phead==NULL)
return;
else
phead->next=NULL;
}
2.前插
void InsertListfront(Link phead,LNdataType x){
LN*newnode=(LN*)malloc(sizeof(LN));
if(newnode==NULL)
exit(-1);
else{
newnode->data=x;
newnode->next=phead->next;
phead->next=newnode;
}
}
3.后插
void InsertListback(Link phead,LNdataType x){
LN*newnode=(LN*)malloc(sizeof(LN));
if(newnode==NULL){
ex