判斷單連結串列中是否存在環,並輸出環入口節點。
學習了這位大神的方法,這裡只是個人的理解。詳情請點選
基本思路:
1. 首先判斷是否有環:使用了追逐的方法 定義一個快引用 fast 和慢引用 slow 。快引用走兩 步,慢引用走一步。如果快引用和慢引用相遇了,則說明有環,反則無環。
2. 求環的入口節點:
在這裡學習了上面連結的方法:
當快慢引用都走到環 裡時,快引用就一定會在環裡迴圈跑,因為快是慢的兩倍速度,則兩者一定會相遇。 這個位置記為x。
n:快引用轉的圈數,r:環的周長 x:入口到相遇的距離
則快走了 2s = a+ nr +x
慢走了 s = a+x;
得出關係 :a+x = nr
a = nr - x
所以當n轉一圈時:a = r-x
如圖:
所以:繼續定義兩個引用,tmp 和 tmp1 ,tmp從head開始走。tmp1從x位置向後走。
因為a 的距離等於r-x的距離,所以當tmp = tmp1 時,這個節點就是環入口節點。
這裡是程式碼實現:`
public static MySingleLinkedList.Node ringNode(MySingleLinkedList.Node head){
if (head == null ) {
return null;
}
MySingleLinkedList.Node slow = head;
MySingleLinkedList.Node fast = head;
while(fast != null && fast.next != null ){
slow = slow.next;
fast = fast.next.next;
if (slow == fast){
MySingleLinkedList.Node tmp = head;
MySingleLinkedList.Node tmp1 = slow;
while (tmp != tmp1){
tmp = tmp.next;
tmp1 = tmp1.next;
}
return tmp;
}
}
return null;
}`
這裡是力扣測試結果:
如果這裡有錯誤的地方歡迎指正。
相關文章
- 如何判斷連結串列中是否有環並找出環的入口位置
- 判斷是否為環形連結串列
- 連結串列中環的入口結點
- 對一個連結串列判斷是否有環
- 演算法題:反轉一個單連結串列&判斷連結串列是否有環演算法
- JZ-055-連結串列中環的入口結點
- js判斷dom節點是否存在JS
- 判斷單連結串列是否關於中心對陣
- 請判斷一個連結串列是否為迴文連結串列。
- [演算法]向有序的環形單連結串列中插入新節點演算法
- 單連結串列成環
- 定義一個函式,輸入一個連結串列的頭節點,反轉該連結串列並輸出反轉後連結串列的頭節點函式
- 牛客網高頻演算法題系列-BM6-判斷連結串列中是否有環演算法
- 單連結串列倒數第k結點輸出
- 【連結串列問題】刪除單連結串列的中間節點
- 判斷迴文連結串列
- 牛客網高頻演算法題系列-BM7-連結串列中環的入口結點演算法
- 【連結串列問題】打卡3:刪除單連結串列的中間節點
- 環形連結串列
- **24. 兩兩交換連結串列中的節點****19.刪除連結串列的倒數第N個節點****面試題 02.07. 連結串列相交****142.環形連結串列II**面試題
- 每天一道leetcode142-尋找連結串列中環的入口LeetCode
- Day4(連結串列)|24. 兩兩交換連結串列中的節點 & 19.刪除連結串列的倒數第N個節點 & 面試題 02.07. 連結串列相交 &142.環形連結串列II面試題
- oracle中判斷欄位是否存在和新增表結構Oracle
- Day 4 | 24. 兩兩交換連結串列中的節點 、 19.刪除連結串列的倒數第N個節點 、面試題 02.07. 連結串列相交 、142.環形連結串列II面試題
- POJ2240 Arbitrage【判斷正環的存在】
- 環形連結串列II
- 單連結串列-相鄰節點交還
- java判斷mysql中資料庫是否存在JavaMySql資料庫
- QJsonObject判斷欄位是否存在JSONObject
- MySQL判斷表名是否存在MySql
- postgresql如何判斷表是否存在SQL
- JavaScript 判斷函式是否存在JavaScript函式
- python 判斷檔案是否存在Python
- golang判斷檔案是否存在Golang
- POJ3259 Wormholes【判斷是否有負環】Worm
- 判斷一個有向圖是否有環
- 第四天:● 24. 兩兩交換連結串列中的節點 ● 19.刪除連結串列的倒數第N個節點 ● 面試題 02.07. 連結串列相交 ● 142.環形連結串列II面試題
- 結點插入到單連結串列中