[数据结构——lesson5.1链表的应用]

引言

上节内容我们讲到单链表和双向链表的功能与实现方法,这节为了更好的理解链表,我们主要学习链表的算法题目和应用

学习目标:链表OJ题

  1. 移除链表元素
  2. 反转链表
  3. 合并两个有序链表
  4. 链表的中间节点
  5. 环形链表的约瑟夫问题
  6. 分割链表
1.移除链表元素

OJ题移除链表元素

思路1:遍历原链表

思路2:找值不为val的节点,尾插到新链表中(创建新链表)

2.反转链表

思路一:创建新链表,将原链表中的节点拿过来头插。

思路二:创建三个指针,完成原链表的翻转。

OJ题反转链表

3.合并两个有序链表

OJ题合并两个有序链表

思路:创建新的空链表,遍历原链表,将节点小的放在新链表中尾插操作

4.链表的中间节点

OJ题链表的中间节点

思路1:遍历count记录节点数,返回(count/2)节点的next节点。

思路2:快慢指针。slow每走一步,fast走两步

但是要注意节点数奇偶数不同情况(中间节点)也很会有所不同。

所以我们要判断条件为(fast&&fast->next)

5.环形链表的约瑟夫问题

OJ题环形链表的约瑟夫问题

约瑟夫问题

设编号为1,2,...n的n个人围成一个圈,约定编号为k(1<=k<=n)的人从1开始保数,数到m的那个人出列,它的下一位又从1开始报数,数到m的人又出列,依次类推,直到所有人出列为止,由此产生一个出对编号的序列

思路:使用一个不带头节点的环形链表,先构成一个又n个节点的单向循环链表,然后由k节点从1开始计数,计到m时,对应节点从链表中删除,然后再往下计数直到链表为空

依次进行

6.分割链表

OJ题分割链表

思路1:prev、pcur、ptail、newptail四指针尾插

思路2:创建新链表(哨兵位)

  • 若pcur节点的值小于x,头插在新链表中,
  • 若pcur节点的值大于或等于x,尾插到NewTail中。

思路3:小链表(lessHead、lessTail),大链表(greater Head、greater Tail)

将小链表的尾节点和大链表的第一个有效节点首尾相连

注意,虽然题目给出的是不需要 保留 每个分区中各节点的初始相对位置。但是我们这里考虑了保留 每个分区中各节点的初始相对位置

结束语:本节我们学习了关于链表的一些OJ题。

相关推荐
奋发向前wcx5 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
ChaoZiLL9 小时前
我的数据结构4-栈和队列
数据结构
miller-tsunami10 小时前
顺序表相关知识点
数据结构·顺序表
华玥作者12 小时前
uniapp 万条数据不卡顿:我写了个虚拟列表组件 hy-list,原生支持瀑布流
数据结构·uni-app·list·vue3
2401_8414956412 小时前
【数据结构】B*树
数据结构·c++·b树·算法·删除·插入·三分分裂
晚笙coding12 小时前
LeetCode 108:将有序数组转换为二叉搜索树 —— 从数组到平衡二叉树的递归构造
数据结构·算法·leetcode
不如语冰13 小时前
AI大模型入门-模块导入import
数据结构·人工智能·pytorch·python
岑梓铭13 小时前
《考研408数据结构》第七章(7.1 查找:顺序查找、折半查找、分块查找)复习笔记
数据结构·笔记·考研·408·ds·查找
壹号用户14 小时前
c++入门之list了解及使用
数据结构·list
来一碗刘肉面14 小时前
什么是双端队列
数据结构·链表