鏈表判環(huán)

如何判斷一個單鏈表是否有環(huán)?有環(huán)的話返回進(jìn)入環(huán)的第一個節(jié)點的地址,無環(huán)的話返回空。如果鏈表的長度為N,請做到時間復(fù)雜度O(N),額外空間復(fù)雜度O(1)。

策略

  1. 定義fast和slow指針;


  2. 前者一次走兩步,后者一次走一步;走完之后做一次結(jié)算:
  • 如果前者越界,說明無環(huán)
  • 如果兩者相遇,說明有環(huán)
  1. 若相遇,slow回到頭結(jié)點,開始繼續(xù)走。但這次fast和slow每次均走一步。



  2. 兩者相遇點即為入環(huán)結(jié)點。


CODE

    ListNode* chkLoop(ListNode* head) {
        if(!head || !head->next)
            return nullptr;
        ListNode* H=new ListNode(0);
        H->next=head;
        ListNode *fast=H,*slow=H;
        while(fast->next && fast->next->next){
            fast=fast->next->next;
            slow=slow->next;
            if(fast==slow){
                break;
            }
        }
        if(fast!=slow)
            return nullptr;
        slow=H;
        while(fast!=slow){
            fast=fast->next;
            slow=slow->next;
        }
        delete H;
        return fast;
    }

簡略證明


設(shè)鏈表非環(huán)內(nèi)結(jié)點數(shù)目是m1
環(huán)內(nèi)結(jié)點數(shù)目是m2
(本例子中,m1=3 m2=6)
慢指針在第n步會到達(dá)n結(jié)點
快指針在第n步會到達(dá)

  • 2n (2n<=m1)
  • m1+(2n-m1)%m2 (2n>m1)

如果兩者第一次相等,則快指針到達(dá) m1+[(2n-m1)-m2]=2n-m2
聯(lián)立求得 n=m2
也就是說,第一次相遇時的地點是m2號結(jié)點。因為鏈表前段有m1個非環(huán)結(jié)點,所以m2號結(jié)點如果想走到入環(huán)點,需要走:m2-(m2-m1)=m1步
此時如果慢指針從頭開始走,也需要走m1步
所以兩者會相遇在入環(huán)點。

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

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

  • 如何判斷一個單鏈表是否有環(huán)?有環(huán)的話返回進(jìn)入環(huán)的第一個節(jié)點的值,無環(huán)的話返回-1。如果鏈表的長度為N,請做到時間復(fù)...
    X_Y閱讀 239評論 0 0
  • 轉(zhuǎn)載請注明出處:http://www.itdecent.cn/p/c65d9d753c31 在上一篇博客《數(shù)據(jù)結(jié)構(gòu)...
    Alent閱讀 3,595評論 4 74
  • 大學(xué)的時候不好好學(xué)習(xí),老師在講臺上講課,自己在以為老師看不到的座位看小說,現(xiàn)在用到了老師講的知識,只能自己看書查資...
    和玨貓閱讀 1,548評論 1 3
  • //leetcode中還有花樣鏈表題,這里幾個例子,冰山一角 求單鏈表中結(jié)點的個數(shù)----時間復(fù)雜度O(n)這是最...
    暗黑破壞球嘿哈閱讀 1,653評論 0 6
  • 1. 鏈表 鏈表是最基本的數(shù)據(jù)結(jié)構(gòu),面試官也常常用鏈表來考察面試者的基本能力,而且鏈表相關(guān)的操作相對而言比較簡單,...
    Mr希靈閱讀 1,576評論 0 20

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