1. 程式人生 > >劍指Offer-連結串列環的入口

劍指Offer-連結串列環的入口

題目描述

給一個連結串列,若其中包含環,請找出該連結串列的環的入口結點,否則,輸出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;
	}
}