給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 null。
為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。注意,pos 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。
說明:不允許修改給定的鍊錶。
高階:你是否可以不用額外空間解決此題
解法一:(使用額外空間)set
/**
* 方法一:set集合 api
* @param head
* @return
*/public listnode detectcycle(listnode head)
setpath = new hashset();
listnode temp = head;
path.add(temp);
while(temp.next != null)
path.add(temp);
}return null;
}
解法二:首先使用 快慢指標
刨去快針追趕慢針的半圈(b),剩餘路程即為所求入環距離(a=c)
public listnode detectcycle1(listnode head)
//找環的最後乙個節點
listnode lastnode = findlastnode(head);
if(lastnode == null)
listnode temp1 = head;
listnode temp2 = lastnode;
while(temp1 != temp2)
return temp1;
}private listnode findlastnode(listnode head)
}return null;
}
142 環形鍊錶 II
還是快慢指標的問題,當發現有環時,將fast指向head,fast一次向前移動乙個節點,則fast和slow一定會在環的入口相遇.證明 設s為slow指標走的節點個數,m為環的入口距head的位置 則第一次相遇時,fast和head相對於環入口的位置相同,fast在環中的相對於環入口的位置在 2s ...
142 環形鍊錶 II
給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。說明 不允許修改給定的鍊錶。高階 你是否可以不用額外空間解決此題?definition for singly linked list.struct listnode class solution node set.insert...
142 環形鍊錶 II
給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。示例 1 輸入 head 3,2,0,4 pos 1 輸出...