單鏈表面試題 鍊錶帶環問題

2021-08-14 05:32:37 字數 972 閱讀 6420

判斷單鏈表是否帶環,並求得相遇點

思路:快慢指標問題,(前面已經講過快慢指標原理,在這裡不再詳細描述)

當快指標比慢指標多走一步,在某個環內一定會相遇在某一點;反過來則有:當兩個快慢指標在某一點相遇,這個鍊錶一定是帶環的鍊錶,反之不帶環(具體過程如圖)

具體**:

//鍊錶是否帶環(並返回相遇點)

slistnode* slistiscircle(slistnode*

list)

}return

null;

}

2.環的長度

思路:環的長度可由計數器來完成,我們已經知道環內的相遇點,故而可以從相遇點開始遍歷,同時記錄所遍歷的節點數,當回到相遇點時,記錄的節點數就是環的長度

具體**:

//求環的長度

int slistcirclelenth(slistnode* list, slistnode* meet)

return

count;

}

求環的入口點

思路:乙個結論:鍊錶的頭到入口點的距離恰好是相遇點到入口點的距離(證明如下圖)

具體**:

//求環的入口點

slistnode* slistnodeentrynode(slistnode*

list, slistnode* meet)

return phead;

}

面試題 單鏈表帶環問題

關於單鏈表帶環問題 1 怎樣判斷乙個單鏈表是否帶環 2 如果帶環,環的長度怎麼計算 3 如果帶環,怎麼求環的入口 1 怎樣判斷乙個單鏈表是否帶環 我們知道,單鏈表如果帶環,那麼從煉表頭開始遍歷就會進入死迴圈。其實我們可以用上篇部落格中提到的兩個指標移動的思想來求解,在這裡可以讓兩個指標移動速度不同,...

單鏈表帶環問題

判斷單鏈表是否帶環?若帶環,求環的長度?求環的入口點?1 2 3 4 5 6 7 8 9 不帶環 鍊錶遍歷一次,到最後的節點的下乙個節點會指向null,此時鍊錶不帶環。帶環 在判斷鍊錶是否帶環之前,應該先判斷鍊錶是否為空。空鍊錶肯定不帶環。只要鍊錶帶環,對鍊錶進行遍歷就會形成死迴圈,沒有出口。這是就...

單鏈表面試題 帶環鍊錶的入口點

昨天做了乙個小總結,發現單鏈表這塊關於帶環鍊錶漏掉了,今天就來總結一下。要尋找乙個單鏈表的環的入口點,首先得判斷乙個鍊錶是否帶環,那麼又怎樣判斷乙個單鏈表是否帶環呢?首先我們得普及一下環有什麼特性,我們知道無環的單鏈表有首節點和尾節點,那麼帶環的單鏈表呢?顯然還是有首節點的,但是沒有尾節點吧。如圖所...