快慢指针:妙解查找链表的中间结点问题
创作时间:
作者:
@小白创作中心
快慢指针:妙解查找链表的中间结点问题
引用
CSDN
1.
https://blog.csdn.net/2302_80190394/article/details/136767602
链表是一种常见的数据结构,其中每个元素(节点)包含数据和指向下一个节点的指针。在某些算法和数据处理场景中,找到链表的中间节点是一个常见的需求,例如在合并排序算法中。本文将介绍如何使用快慢指针算法高效地找到链表的中间节点。
给你单链表的头结点 head
,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
示例 1:
**输入:**head = [1,2,3,4,5]
**输出:**[3,4,5]
**解释:**链表只有一个中间结点,值为 3 。
示例 2:
**输入:**head = [1,2,3,4,5,6]
**输出:**[4,5,6]
**解释:**该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。
方法一:暴力求解
思路:遍历所有节点,找到中间节点,再次遍历,返回中间节点指针
//若需要遍历完所有节点,则是while(start)而不是start->next
struct ListNode* middleNode(struct ListNode* head) {
struct ListNode* start = head;
int count = 0;
while(start){ //若只有一个元素,则只是循环一轮
count++;
start = start->next; //控制语句
}
int count2 = 0;
start = head;
while(count2 < (count / 2))
{
start = start->next;
count2++;
}
return start;
}
缺点:需要两次遍历,时间长。
方法二:快慢指针法
思路:建立fast和slow指针,当fast指针走两步时,slow指针才走一步。
struct ListNode* middleNode(struct ListNode* head) {
struct ListNode* fast = head;
struct ListNode* slow = head;
while(fast){
if(fast->next){
fast = fast->next->next;
slow = slow->next;
}
else
fast = fast->next;
}
return slow;
}
需要注意的是:在else语句中,slow不能前进!只有fast连续走两步时,slow才可以往下进行!此时,大大增加了时间效率。
优化代码:
while(fast && fast->next ){
// if(fast->next){
fast = fast->next->next;
slow = slow->next;
// }
// else
// fast = fast->next;
}
return slow;
需要注意的是,不能用 || ,或: 若其中一个为真,则进入循环,当fast->next为假时,fast可以为真!
热门推荐
曼城vs利物浦:伊蒂哈德球场一直是利物浦的 “伤心地”
如何运用投资策略降低风险?股票对冲的操作方法有哪些?
如何给孩子选择乳制品(看这一篇就够了)
石油大佬入局核聚变:中国石油投资聚变新能,布局未来能源
选错移动硬盘盒?这些坑你踩了吗?
2025年,对退休独生子女父母奖励登记,各地发放标准一览
4-5个月宝宝常见问题合集
高层豪宅爆炸,无人机能救下那个女孩吗
湿热体质的食物禁忌是什么
医学超声在疾病检测中的重要性
宝宝爱抠脚?7个原因+4个应对方法,让新手爸妈不再焦虑
常用补血药:种类与功效全解析
如何在城市中找到理想的居住府邸?这种寻找需要考虑哪些因素?
公房承租人去世拆迁安置房子女如何继承
角形的高、中线与角平分线 三角形的稳定性
征信的“硬查询”和“软查询”是什么?有什么区别
利好不停歇 A股大反转!3天狂飙9%,沪指站上3000点
舌头看身体健康状况(舌头保健操)
如何判断年假是按工龄算还是按入职日算
Excel中怎么查找替换内容
45㎡小户型装出两室一厅,次卧一室三用零杂物,这设计心机满满
脸暗黄是什么原因?该怎么调理
必看!蒸包子馒头的绝招,让你成为厨房达人
不可切除的局部晚期NSCLC 原发灶SBRT后同步化放疗和巩固治疗或可被接受
智能汽车无图智驾的原理是什么?安全性如何?
了解牙龈萎缩:7 种主要原因、症状和解决方案
Windows 10开机进入安全模式的多种方法及注意事项
蜂王浆能清血管吗?蜂王浆可以软化血管吗?对心脑血管有帮助吗?
自动挡学车热度上升背后,考试相对简单拿本速度快
房贷审批中的征信查询次数及注意事项