鍊錶專題2 環形鍊錶 II

2021-10-04 01:14:57 字數 1207 閱讀 7801

給定乙個鍊錶,判斷鍊錶中是否有環。

為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。

示例 1:

輸入:head = [3,2,0,-4], pos = 1

輸出:tail connects to node index 1

解釋:鍊錶中有乙個環,其尾部連線到第二個節點。

示例 2:

輸入:head = [1,2], pos = 0

輸出:tail connects to node index 0

解釋:鍊錶中有乙個環,其尾部連線到第乙個節點。

示例 3:

輸入:head = [1], pos = -1

輸出:no cycle

解釋:鍊錶中沒有環。

高階:你是否可以不用額外空間解決此題?

***

***解題思路:

這題與環形鍊錶i不同,i中只需要判斷是否有環,而這道題要找到環尾指向的回跳點

1.利用兩個指標,乙個在前乙個在後,一次向後移動乙個,如果沒有環,那麼後指標一旦變空null,就說明沒有環,如果有環,那麼後指標肯定會回跳,它所回跳到的位置就是環點

**實現:******

```cpp

class solution

auto q=head->next;//後指標

if(q==null)

while(q!=null)

}return q;

}};```***此為8ms方案

2.單指標解法,利用乙個指標一次往前前進一次,當到了回跳位置時,其下一次向前移動必定小於等於回跳位置***

**實現:

```cpp

class solution

else if(head->next==null)

auto p=head;

while(p->next!=null)

}if(p->next==null)

return p;

}};```

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 輸出...