[数据结构——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题。

相关推荐
凯瑟琳.奥古斯特7 小时前
图论核心考点精讲
开发语言·数据结构·算法·排序算法·哈希算法
m0_629494738 小时前
LeetCode 热题 100-----13.最大子数组和
数据结构·算法·leetcode
田梓燊8 小时前
力扣:94.二叉树的中序遍历
数据结构·算法·leetcode
khalil10208 小时前
代码随想录算法训练营Day-38动态规划06 | 322. 零钱兑换、279.完全平方数、139.单词拆分、多重背包、总结
数据结构·c++·算法·leetcode·动态规划
自我意识的多元宇宙8 小时前
数据结构----希尔排序
数据结构·算法·排序算法
y = xⁿ8 小时前
Redis八股学习日记:数据结构;跳表的底层;Reids的事务机制
数据结构·redis·学习
我不是懒洋洋8 小时前
【数据结构】二叉树OJ(单值二叉树、检查两棵树是否相同、对称二叉树、二叉树的前序遍历、另一颗树的子树)
c语言·数据结构·c++·经验分享·算法·leetcode·visual studio
地球资源数据云8 小时前
2015年中国30米分辨率沼泽湿地空间分布数据集
大数据·数据结构·数据库·人工智能·机器学习
Rabitebla10 小时前
【C++】string 类:原理、踩坑与对象语义
linux·c语言·数据结构·c++·算法·github·学习方法
Old Uncle Tom17 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent