leetcode 最長公共子序列,Leetcode142. Linked List Cycle II環形鏈表2

 2023-12-06 阅读 27 评论 0

摘要:給定一個鏈表,返回鏈表開始入環的第一個節點。?如果鏈表無環,則返回?null。 說明:不允許修改給定的鏈表。 進階: 你是否可以不用額外空間解決此題? leetcode 最長公共子序列,? ? 方法一:使用map 方法二: 分兩個步驟࿰

給定一個鏈表,返回鏈表開始入環的第一個節點。?如果鏈表無環,則返回?null。

說明:不允許修改給定的鏈表。

進階:

你是否可以不用額外空間解決此題?

leetcode 最長公共子序列,?

?

方法一:使用map

方法二:

分兩個步驟,首先通過快慢指針的方法判斷鏈表是否有環;如果有環,則尋找入環的第一個節點。具體的方法為,首先假定鏈表起點到入環的第一個節點A的長度為a,到快慢指針相遇的節點B的長度為(a + b)。現在我們想知道a的值,注意到快指針p2始終是慢指針p走過長度的2倍,所以慢指針p從B繼續走(a + b)又能回到B點,如果只走a個長度就能回到節點A。但是a的值是不知道的,注意到起點到A的長度是a,那么可以用一個從起點開始的新指針q和從節點B開始的慢指針p同步走,相遇的地方必然是入環的第一個節點A。?

leetcode約瑟夫環??

?

class Solution {
public:ListNode *detectCycle(ListNode *head) {if(head == NULL)return NULL;ListNode *fast = head;ListNode *slow = head;bool haveCycle = false;while(slow ->next != NULL && fast ->next != NULL && fast ->next ->next != NULL){slow = slow ->next;fast = fast ->next ->next;if(slow == fast){haveCycle = true;break;}}if(haveCycle){ListNode *node = head;while(node != slow){node = node ->next;slow = slow ->next;}return node;}elsereturn NULL;}
};

轉載于:https://www.cnblogs.com/lMonster81/p/10433826.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/190829.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息