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

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


前言



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);
}


相关文章
|
4月前
【数据结构】单链表之--无头单向非循环链表
【数据结构】单链表之--无头单向非循环链表
|
4月前
|
C++
数据结构01-线性结构-链表栈队列-栈篇
数据结构01-线性结构-链表栈队列-栈篇
|
4月前
|
存储
数据结构第二课 -----线性表之单向链表
数据结构第二课 -----线性表之单向链表
|
1月前
|
存储 JavaScript 前端开发
JavaScript实现单向链表
JavaScript实现单向链表
15 0
|
3月前
|
存储 算法
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
|
3月前
|
算法 C语言
数据结构——单向链表(C语言版)
数据结构——单向链表(C语言版)
37 2
|
3月前
|
Java
单向环形链表-约瑟夫问题(java)
单向环形链表-约瑟夫问题(java)
|
3月前
|
存储 算法 前端开发
【C/数据结构与算法】:链表的实现(单向链表+双向链表)
【C/数据结构与算法】:链表的实现(单向链表+双向链表)
21 0
|
4月前
|
算法 测试技术
【数据结构与算法 | 基础篇】单向循环链表实现队列
【数据结构与算法 | 基础篇】单向循环链表实现队列