快慢指针:妙解查找链表的中间结点问题
创作时间:
作者:
@小白创作中心
快慢指针:妙解查找链表的中间结点问题
引用
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可以为真!
热门推荐
入职社保应怎样缴纳?这样的缴纳方式有哪些规定?
不饱和脂肪酸:定义、功效与食物来源全解析
考研国家线公布,大多数专业单科和总分分数线低于去年
黄精的功效与作用
2024年1-6月雅思听力考情及趋势分析
炒股融资的风险有哪些?如何合理控制炒股融资的风险?
养鹦鹉为什么需要许可证?
凝聚智慧,共创高效课堂——探索教师集体备课的魅力
自己缴社保和公司缴,有何区别?
征收补偿中的集体补偿范围与分配原则
以「透肤单品」打造透明感穿搭!4款单品混搭技巧不可错过
中脘穴的位置与功效:调节胃肠功能的保健穴位
汽车轮胎有正反吗?装反了有什么影响?
群晖SSD缓存配置:性能飙升,存储优化必选
月子能吃鱼肉吗?月子里的鱼肉盛宴:营养、好处与美食制作知识!
26考研选专业7大法则:从兴趣到就业,一目了然!
如何有效管理各类投资收益?这些收益管理方式存在哪些挑战?
食用油一二三四级,有什么差别?如何选择?
如何确定伦敦金的杠杆倍数?这个倍数怎样影响投资风险?
供热客服知识库建设:在线报修与即时沟通的重要性
男性喝藏红花且能收获诸多益处
光刻机关键性能解析:提高集成电路制造精度
产后多久可以进行游泳?什么时候游泳最好?
黄金ETF趋势分析的关键因素有哪些?这些因素如何影响投资者决策?
人民币汇率升值对我们的影响:利与弊的权衡
PTCGP帝牙卢卡卡组攻略
厦大“嘉庚”号来榕 这艘静音科考船有哪些“黑科技”
幽门螺杆菌阳性要不要治?医生的专业建议来了
现在坐高铁需要取票吗?无需取票直接刷证乘车,便捷出行不再是梦
TPM设备管理:全面提升生产效率与设备维护的综合解决方案