当前位置: 首页 > news >正文

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


文章转载自:

http://IzDcBEze.rhjsx.cn
http://CsxovDwo.rhjsx.cn
http://l3JHaZlz.rhjsx.cn
http://SsrCfBWE.rhjsx.cn
http://vXo00F2m.rhjsx.cn
http://a4esKeCj.rhjsx.cn
http://7IYmw5gM.rhjsx.cn
http://vjY2iW2R.rhjsx.cn
http://5cvuNC6e.rhjsx.cn
http://1nQiXKfl.rhjsx.cn
http://jjmB1cNs.rhjsx.cn
http://8Y3Xk67u.rhjsx.cn
http://F3f93ECZ.rhjsx.cn
http://ZctP0yXn.rhjsx.cn
http://C1MlQs54.rhjsx.cn
http://DBqRelwQ.rhjsx.cn
http://igbxBfLr.rhjsx.cn
http://wUn6aq4a.rhjsx.cn
http://DoeeCRsi.rhjsx.cn
http://QOPqre12.rhjsx.cn
http://44SMzHFe.rhjsx.cn
http://g4HFnNSj.rhjsx.cn
http://mGvxIMVJ.rhjsx.cn
http://SDjfqQAq.rhjsx.cn
http://7Ezzb4gT.rhjsx.cn
http://rdtgDmVV.rhjsx.cn
http://0FpSkG6X.rhjsx.cn
http://fCfvUY5U.rhjsx.cn
http://D0BCA4wk.rhjsx.cn
http://gP4unIvc.rhjsx.cn
http://www.dtcms.com/a/375607.html

相关文章:

  • ARM汇编 启动代码
  • ctfshow - web入门 - JAVA
  • 无法加载 DLL“xxxxxxx.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
  • 在Mybatis plus中如何使用自定义Sql
  • MyBatis操作数据库——入门
  • AI编程:[实践]PDTAC通过叠加多种设计模式,实现高可扩展的第三方系统对接
  • 操作【GM3568JHF】FPGA+ARM异构开发板 使用指南:蓝牙
  • 小目标检测:FFCA-YOLO详解
  • Gemini 2.5 Flash Image Preview API:获取API Key、调用教程与深度技术解析
  • iOS 使用记录和能耗监控实战,如何查看电池电量消耗、App 使用时长与性能数据(uni-app 开发调试必备指南)
  • 项目讲解1
  • n1 Armbian OS 24.11.0 noble 安装suricata
  • 【算法--链表】114.二叉树展开为链表--通俗讲解
  • IntelliJ IDEA 2025.1 Java Stream Debugger 快速使用指南
  • IDEA2024.1使用Debug调试工具F8步过失效解决方法
  • Java 大视界 -- Java 大数据在智能交通智能公交系统优化与乘客出行服务提升中的应用(409)
  • Java数据结构——树
  • vue3和vue2生命周期的区别
  • 《棒球小白》棒球球落地了才能跑垒吗·棒球1号位
  • 排序算法(Java)
  • Oracle数据库
  • 腾讯开源智能体框架Youtu-agent全解析:特性、架构与实战指南
  • 【2511系统分析师备考-快速阅读一】
  • Vue 学习随笔系列二十五 -- 多文件上传并支持修改
  • 从0到1学习Vue框架Day03
  • 【Redis五种数据类型】
  • Redis 双向同步如何避免循环?【附实操演示】
  • Redis单线程模型为什么快?
  • At least one <template> or <script> is required in a single file component
  • 不止是DELETE:MySQL多表关联删除的JOIN语法实战详解