劍指Offer-連結串列環的入口
阿新 • • 發佈:2018-12-12
題目描述
給一個連結串列,若其中包含環,請找出該連結串列的環的入口結點,否則,輸出null。
解法:先採用快慢指標,一個走兩步,一個走一步,假設走兩步的指標先到達尾部,那麼就是沒有環,假設有環,兩個指標必定會相遇,相遇之後,走兩步的指標從頭節點重新開始,兩個指標都走一步,當兩個指標再次相遇時,即為環的入口。
public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { ListNode one = pHead; ListNode two = pHead; while (two.next != null) { if (null != two.next.next) { //走兩步 two = two.next.next; //走一步 one = one.next; } else { return null; } //第一個從相遇後 if (one == two) { //走兩步的指標從頭結點重新開始 two = pHead; //再次相遇,節點即為環的入口 while (one != two) { one = one.next; two = two.next; } return one; } } return null; } }