线性单向链表的插入、删除、合并

简介: 线性单向链表的插入、删除、合并前言插入删除合并


前言



typedef struct LNode{
ElemType data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;


插入



image.png

如图所示总共分为四步:

1.找到插入的位置的前一位置

2.设置要插入的节点的数据域

3.与其前驱节点相连接

4.与其后继节点相连接

Status ListInsert(LinkList &list,int i, ElemType e){
p = list; j =0;
//找到要插入的位置的前一个位置
while (p && j<i-1){
p = p->next;
j++;
}
if (!p || j > i-1) return ERROR;
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
p->next = s;
s->next = p-next;
return OK;
}

删除



image.png

如图所示总共分为四步:

1.找到删除的位置的前一位置

2.将要删除的节点的后继节点与其前驱节点相连,使其断开链表

3.获取要删除节点的数据域(不必须要)

4.释放删除的节点空间

Status ListDelete(LinkList &list,int i, ElemType &e){
p = list; j =0;
//找到要删除的位置的前一个位置
while (p->next && j<i-1){
p = p->next;
j++;
}
if (!p->next || j > i-1) return ERROR;
q = p->next;//得到要删除的节点引用
p->next = q->next;//将要删除的后继节点与其前驱节点相连,
e = q->data;
free(q);//释放删除的节点
return OK;
}


合并


Status MergeList(LinkList &La,LinkList &Lb, LinkList &Lc){
pa = La->next;
pb = Lb->next;
Lc = pc = La; //表Lc的头节点
while (pa && pb){
if (pa->data <= pb->data){
pc ->next = pa;
pc = pa;
pa = pa->next;
}else{
pc ->next = pb;
pc = pb;
pb= pb->next;
}
//将剩余的节点插入pc中
pc->next = pa?pa:pb;
free(Lb);
}


相关文章
|
6月前
【数据结构】单链表之--无头单向非循环链表
【数据结构】单链表之--无头单向非循环链表
|
1月前
|
存储
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)(一)
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)
|
1月前
|
算法 Java
数据结构与算法学习六:单向环形链表应用实例的约瑟夫环问题
这篇文章通过单向环形链表的应用实例,详细讲解了约瑟夫环问题的解决方案,并提供了Java代码实现。
19 0
|
1月前
|
存储 缓存
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)(二)
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)
|
6月前
|
存储
数据结构第二课 -----线性表之单向链表
数据结构第二课 -----线性表之单向链表
|
3月前
|
存储 JavaScript 前端开发
JavaScript实现单向链表
JavaScript实现单向链表
21 0
|
5月前
|
存储 算法
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
|
5月前
|
算法 C语言
数据结构——单向链表(C语言版)
数据结构——单向链表(C语言版)
45 2
|
5月前
|
Java
单向环形链表-约瑟夫问题(java)
单向环形链表-约瑟夫问题(java)