
3种解法 - 定位单链表的中间节点
初始化指针:使用两个指针 移动指针:同时开始移动指针, 终止条件:当 返回结果:此时,
发布日期:2021-05-08 16:54:52
浏览次数:21
分类:精选文章
本文共 1067 字,大约阅读时间需要 3 分钟。
单链表中间结点的寻找问题
问题描述
给定一个带有头结点 head
的非空单链表,要求返回链表的中间结点。如果链表有偶数个结点,则返回第二个中间结点。例如:
- 示例1:输入
[1,2,3,4,5]
,输出结点3
,序列化形式为[3,4,5]
。 - 示例2:输入
[1,2,3,4,5,6]
,输出结点4
,序列化形式为[4,5,6]
。
解法三:快慢指针技术
思路概述
快慢指针技术是一种高效的链表操作方法,常用于寻找链表的中间节点。具体步骤如下:
slow
和 fast
,均指向链表的头结点 head
。fast
指针每移动两步,slow
指针移动一步。这种方式确保 fast
指针总是比 slow
指针提前移动一步。fast
指针到达链表的末尾时,即 fast.next
为空,停止移动。slow
指针正好位于链表的中间位置。如果链表长度为偶数,返回第二个中间结点。详细步骤
初始化指针:
slow = headfast = head
移动指针:
while fast != None and fast.next != None: fast = fast.next.next slow = slow.next
fast
指针每次移动两步,slow
指针移动一步。- 当
fast
到达链表末尾时,slow
指针位于中间位置。
返回结果:
return slow
- 无论链表长度是奇数还是偶数,
slow
指针都指向正确的中间结点。
优点分析
- 时间复杂度:O(n),因为只需遍历链表一次。
- 空间复杂度:O(1),仅使用常数空间。
实际应用示例
示例1:链表
[1,2,3,4,5]
:- 初始:
slow
和fast
都指向1
。 - 第一次循环:
fast
到达3
,slow
到达2
。 - 第二次循环:
fast
到达5
,slow
到达3
。 fast
到达末尾,返回slow
即3
。
- 初始:
示例2:链表
[1,2,3,4,5,6]
:- 初始:
slow
和fast
都指向1
。 - 第一次循环:
fast
到达4
,slow
到达2
。 - 第二次循环:
fast
到达6
,slow
到达3
。 - 第三次循环:
fast
到达末尾,返回slow
即4
。
- 初始:
总结
使用快慢指针技术是高效且简洁的解决方案,能够在 O(n) 时间和 O(1) 空间复杂度内找到链表的中间结点,适用于各种长度的链表,包括奇数和偶数节点的情况。这种方法不仅代码简洁,而且在实际应用中表现优异。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月28日 02时15分24秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux学习总结(66)——CentOS7操作系统SSH安全加固
2023-02-03
Linux学习总结(69)——Linux 生成随机数的6种方法
2023-02-03
Linux学习总结(6)——CenterOS7安装mysql5.5的方法
2023-02-03
Linux学习总结(6)——CenterOS7安装mysql5.5的方法
2023-02-03
Linux学习总结(70)——Bash 脚本中常用的内置变量汇总
2023-02-03
Linux学习总结(72)——Linux系统安全加固
2023-02-03
Linux学习总结(73)——Linux高频命令大总结
2023-02-03
Linux学习总结(74)——wget 命令详解
2023-02-03
Linux学习总结(75)—— Linux history 命令实用技巧
2023-02-03
Linux学习总结(76)—— Shell 脚本日志技巧
2023-02-03
Linux学习总结(77)—— Shell 开发运维经验总结
2023-02-03
Linux学习总结(78)—— 常见开源协议讲解
2023-02-03
Linux学习总结(79)—— Shell 编程规范
2023-02-03
Linux学习总结(80)—— 开发人员最常用的 Linux 命令总结
2023-02-03
Linux学习总结(81)—— Linux 权限详解
2023-02-03