leetcode--09. 鏈表環(huán)起點(diǎn) II

題目:
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.
Follow up:
Can you solve it without using extra space?
給定一個(gè)鏈接列表,返回循環(huán)開始的節(jié)點(diǎn)。如果沒有循環(huán),則返回NULL。
拓展:
你能在不占用額外空間的情況下解決這個(gè)問題嗎?

思路:
快慢兩個(gè)指針,先判斷是否有環(huán),沒有返回null,有的話,快慢兩個(gè)指針會(huì)相遇
然后兩指針分別從頭和從相遇點(diǎn)出發(fā),再次相遇即為環(huán)入口點(diǎn)

至于為什么:


image.png

證明如下:
如上圖所示,X,Y,Z分別為鏈表起始位置、環(huán)開始位置和兩指針相遇位置,則根據(jù)快指針?biāo)俣葹槁羔標(biāo)俣鹊膬杀叮梢缘贸觯?br> 2 * (a + b) = a + b + n * (b + c);即
a = (n - 1) * b + n * c = (n - 1) * (b + c) + c;
注意到b + c恰好為環(huán)的長(zhǎng)度,故可以推出,如將此時(shí)兩指針分別放在起始位置和相遇位置,并以相同速度前進(jìn),當(dāng)一個(gè)指針走完距離a時(shí),另一個(gè)指針恰好走出 繞環(huán)n-1圈加上c的距離。
故兩指針會(huì)在環(huán)開始位置相遇。

public class Solution {
    public ListNode detectCycle(ListNode head) {
        if (head == null)
            return null;
        ListNode slow = head;
        ListNode fast = head;
        while (fast.next != null && fast.next.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            if (slow == fast) {
                ListNode meetNode = fast;
                while (head != meetNode) {
                    head = head.next;
                    meetNode = meetNode.next;
                }
                return meetNode;
            }
        }
        return null;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,560評(píng)論 0 13
  • 昨晚下班回到家,老大還沒睡,一邊換著鞋一邊問他怎么還不睡覺,都10點(diǎn)多了,老大說爸爸今天回來的晚,剛教我學(xué)習(xí)完,我...
    仲昊惟閱讀 219評(píng)論 0 1
  • 我是瞿新林,我今天的學(xué)習(xí)心得是: 一、理解微信互聯(lián)網(wǎng)牧場(chǎng)草地構(gòu)成的三部分;①微信公眾號(hào)是傳輸媒體,分享有營(yíng)養(yǎng)有價(jià)值...
    紫巖沖口的瑤人閱讀 1,230評(píng)論 0 0
  • 聽了傅雷家書中關(guān)于愛情的部分,覺得很不錯(cuò),可以看到一個(gè)中國(guó)知識(shí)分子對(duì)愛情的真知灼見。在這里做個(gè)總結(jié)和記錄,以作為擇...
    YorkYoung閱讀 1,853評(píng)論 0 2
  • Y叔算是我工作以來的第一個(gè)客戶,差不多10年前去路演,發(fā)了資料給Y叔,一個(gè)月后他拎著55萬現(xiàn)金來銀行存,很高興也很...
    MandyDML閱讀 321評(píng)論 0 2

友情鏈接更多精彩內(nèi)容