本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。
一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。
如有侵权,请留言作删文处理。
课程视频链接:
数据结构与算法基础–第3周10–2.5线性表的链式表示和实现10–单链表基本操作8–删除节点
📚 📌 📝 🔍 ⚠️ 😊 ⭐ 🔗 👋 ❓ 💬 🔹 🔸 🔖 ❗️ 💟 ➔
📚 【Week03】10_线性表的链式表示和实现10
单链表的基本操作
(1) 单链表的销毁
(2) 清空单链表
(3) 求单链表的表长
(4) 判断单链表是否为空
(5) 取值:取单链表中第 i 个元素的内容
(6) 查找
按值查找:根据指定数据获取数据所在的位置(地址)
按值查找:根据指定数据获取数据所在的位置序号
(7) 插入:在第 i 个结点前插入新结点
(8) 删除:删除第 i 个结点
(9) 单链表的建立:头插法和尾插法
【单链表的删除】删除第 i 个结点
【算法步骤】
(1) 首先找到 a_i-1 的存储位置 p,保存要删除的 a_i 的值。
(2) 令 p->next 指向 a_i+1。
(3) 释放结点 a_i 的空间。
【算法描述】
// 将线性表 L 中第 i 个数据元素删除
Status ListDelete_L(LinkList &L, int i, ElemType &e){
// 初始化
p = L;
j = 0;
// 寻找第 i-1 个结点,并令 p 指向其前驱
while(p->next && (j<(i-1))){
p = p->next;
++j;
}
// 删除位置是否合理判断
if(!p->next || (j>(i-1))){
// 第 i 个元素不存在
return ERROR;
}
// 临时保存被删除结点的地址,以备释放
q = p->next;
// 改变删除结点前驱结点的指针域
p->next = q->next;
// 保存删除结点的数据域
e = q->data;
// 释放删除结点的空间
delete q;
return OK;
}// ListDelete_L