給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回null
。
說明:不允許修改給定的鍊錶。
解題思路:
建立兩個指標乙個每次走兩步,乙個每次走一步,若單鏈表帶環,則在第乙個指標不會找到尾節點,而且第乙個會在環內已知迴圈知道和第二個指標相遇才能退出迴圈,同時返回這個節點位置;
若帶環則讓快指標指向頭結點,然後讓兩個指標同時走,一次乙個節點,當二者相遇時,相遇點就是節點入口。
/**
* 原題要求:
* 給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 null。
* * 思路:
* 建立兩個指標乙個每次走兩步,乙個每次走一步,若單鏈表帶環,則在第乙個指標不會找到尾節點,
* 而且第乙個會在環內已知迴圈知道和第二個指標相遇才能退出迴圈,同時返回這個節點位置;
* 若帶環則讓快指標指向頭結點,然後讓兩個指標同時走,一次乙個節點,當二者相遇時,相遇點就是節點入口。
* * @classname: main
* @description: todo
* @author: mr.ye
* @data: 2018-11-24 18:47
* @version: 1.0
**/class listnode
}class solution
listnode fast = head;
listnode slow = head;
while(fast != null && fast.next != null)
return fast;}}
return null;
}}public class main
public static void print(listnode head)
system.out.println("null");}}
執行結果: 142環形鍊錶
題目描述 給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。題解思路 採用雙指標法,設定乙個快指標,乙個慢指標,它們採取的步長不一樣,如果相遇,就代表鍊錶一定存在環 與環形鍊錶 一致 然後在前邊的迴圈裡利用慢指標尋找入環的第乙個節點,採用標記法,訪問過就標記其val值為99...
142 環形鍊錶
快慢指標,好像和之前的某道題相似 definition for singly linked list.struct listnode struct listnode detectcycle struct listnode head newlow newlow next low low next re...
142 環形鍊錶 II
還是快慢指標的問題,當發現有環時,將fast指向head,fast一次向前移動乙個節點,則fast和slow一定會在環的入口相遇.證明 設s為slow指標走的節點個數,m為環的入口距head的位置 則第一次相遇時,fast和head相對於環入口的位置相同,fast在環中的相對於環入口的位置在 2s ...