首先要学会如何用代码定义一个单链表:
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
//声明一个头指针L,指向单链表的第一个节点
LNode *L; //强调这是一个结点
LinkList L; //强调这是一个单链表
不带头结点的单链表:
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
//初始化一个空的单链表
bool InitList(LinkList &L){
L=NULL; //空表,防止脏数据
return true;
}
//判断单链表是否为空
//方法1
bool Empty(LinkList L){
if(L==NULL)
return true;
else
return false;
}
//方法2
bool Empty(LinkList L){
return (L==NULL);
}
带头结点的单链表:
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
bool InitList(LinkList &L){
L=(LNode *)malloc(sizeof(LNode)); //分配一个头结点
if(L==NULL) //内存不足,分配失败
return false;
L->next=NULL; //头结点指向空
return true;
}
创建单链表:
//写法1:输入一个元素插入一个元素
void createLinkList(LNode *&L){
L=(LNode *)malloc(sizeof(LNode)); //头结点
L->next=NULL; //该头结点指向空,空结点
LNode *p=NULL, *r=L; //声明p指针、r指针,p指针指向空,r指针附着在头结点上
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
p=(LNode *)malloc(sizeof(LNode));
p->next=NULL; //给p指针分配空间,变成空结点
scanf("%d",&(p->data)); //输入数据元素e放入p结点中
//头插法
p->next=L->next;
L->next=p;
//尾插法
p->next=r->next;
r->next=p;
r=p; //r指针移动到p指针的当前位置
}
}
//写法2:直接插入一个数组
void createLinkList(LNode *&L,int a[],int n){
L=(LNode *)malloc(sizeof(LNode)); //头结点
L->next=NULL; //该头结点指向空,空结点
LNode *p=NULL, *r=L; //声明p指针、r指针,p指针指向空,r指针附着在头结点上
for(int i=0;i<n;i++){
p=(LNode *)malloc(sizeof(LNode));
p->next=NULL; //给p指针分配空间,变成空结点
p->data=a[i]; //输入数据元素e放入p结点中
//头插法
p->next=L->next;
L->next=p;
//尾插法
p->next=r->next;
r->next=p;
r=p; //r指针移动到p指针的当前位置
}
}