本文主要是介绍单链表的头插法 尾插法----期末复习2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
对于头插法与尾插法创建单链表的示意图:
### 头插法
初始为空链表:
```
L -> NULL
```
每次插入一个节点,如插入节点3:
```
L -> |3| -> NULL
^ L
```
接着插入节点2:
```
L -> |2| -> |3| -> NULL
^ L
```
继续插入,直到形成:
```
L -> |1| -> |2| -> ... -> |n| -> NULL
^ L
```
代码实现(头插法)
typedef int ElemType; //便于后期的修改
//定义结点类型
typedef struct Node {
ElemType data; //单链表中的数据域
struct Node *next; //单链表的指针域
}Node,*LinkedList;
2.单链表的创建
//单链表的建立(头插法)
LinkedList ListCreatH() {
Node *L;
L = (Node *)malloc(sizeof(Node)); //申请头结点空间
L->next = NULL; //初始化一个空链表
int i=0;
ElemType x; //x为链表数据域中的数据
while(i<10) {
Node *p;
p = (Node *)malloc(sizeof(Node)); //申请新的结点
scanf("%d",&x);
p->data = x; //结点数据域赋值
p->next = L->next; //将结点插入到表头L-->|2|-->|1|-->NULL
L->next = p;
i++;
}
return L;
}
### 尾插法
初始为空链表:
```
L -> NULL
```
每次插入一个节点,如插入节点3,并保持 `r` 指向当前末尾:
```
L -> |3| -> NULL
r L
```
接着插入节点2,`r` 移动到节点3之后:
```
L -> |3| -> |2| -> NULL
r L
```
继续插入,直到形成:
```
L -> |1| -> |2| -> ... -> |n| -> NULL
r L
```
在尾插法中,`L` 始终指向头结点,而 `r` 随着插入过程不断更新,始终保持指向当前最后一个节点。
>>>>>>>
//单链表的建立(尾插法)(注:比较常用)
LinkedList ListCreatT() {
Node *L;
L = (Node *)malloc(sizeof(Node)); //申请头结点空间
L->next = NULL; //初始化一个空链表
Node *r;
r = L; //r始终指向终端结点,开始时指向头结点
int i=0 ; //x为链表数据域中的数据
for(i=0;i<10;i++)
{
Node *p;
p = (Node *)malloc(sizeof(Node)); //申请新的结点
scanf("%d",&p->data);
r->next = p; //将结点插入到表头L-->|1|-->|2|-->NULL
r = p; //将r结点移动到最后一个节点
}
r->next = NULL; //让r结点的指针域置空(链表创建完成)
return L;
这篇关于单链表的头插法 尾插法----期末复习2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!