快慢指標的應用

2022-04-03 02:42:39 字數 3300 閱讀 7941

1 * definition for singly-linked list.

2 * public

class

listnode

9 *}

10 */

11public

class

solution

16 listnode slow =head;

17 listnode fast =head;

18while (fast !=null && fast.next!=null)24

}25return

false;26

}27 }

如果鍊錶存在環,就好像操場的跑道是乙個環形一樣。此時讓快慢指標都從煉表頭開始遍歷,快指標每次向前移動兩個位置,慢指標每次向前移動乙個位置;如果快指標到達null,說明鍊錶以null為結尾,沒有環。如果快指標追上慢指標,則表示有環.

編寫乙個程式,找到兩個單鏈表相交的起始節點。

如下面的兩個鍊錶:

在節點 c1 開始相交。

示例 1:

輸入:intersectval = 8, lista = [4,1,8,4,5], listb = [5,0,1,8,4,5], skipa = 2, skipb = 3

輸出:reference of the node with value = 8

輸入解釋:相交節點的值為 8 (注意,如果兩個列表相交則不能為 0)。從各自的表頭開始算起,鍊錶 a 為 [4,1,8,4,5],鍊錶 b 為 [5,0,1,8,4,5]。在 a 中,相交節點前有 2 個節點;在 b 中,相交節點前有 3 個節點。

示例 2:

輸入:intersectval = 2, lista = [0,9,1,2,4], listb = [3,2,4], skipa = 3, skipb = 1

輸出:reference of the node with value = 2

輸入解釋:相交節點的值為 2 (注意,如果兩個列表相交則不能為 0)。從各自的表頭開始算起,鍊錶 a 為 [0,9,1,2,4],鍊錶 b 為 [3,2,4]。在 a 中,相交節點前有 3 個節點;在 b 中,相交節點前有 1 個節點。

示例 3:

輸入:intersectval = 0, lista = [2,6,4], listb = [1,5], skipa = 3, skipb = 2

輸出:null

輸入解釋:從各自的表頭開始算起,鍊錶 a 為 [2,6,4],鍊錶 b 為 [1,5]。由於這兩個鍊錶不相交,所以 intersectval 必須為 0,而 skipa 和 skipb 可以是任意值。

解釋:這兩個鍊錶不相交,因此返回 null。

這道題有三種解決方法

(1)利用快慢指標將鍊錶1的尾結點的next賦給鍊錶2的頭結點,在迴圈過程中如果slow==fast則證明存在環,之後再建立一組快慢指標找到相的結點

1/**

2* definition for singly-linked list.

3* public class listnode

7* }8*/

9public

class

solution

18 tmp.next=headb;

19 listnode slow=heada;

20 listnode fast=heada;

21while(fast!=null&&fast.next!=null)22

33 tmp.next=null;34

return

fast;35}

36}37 tmp.next=null;38

return

null;39

}40 }

(2)兩鍊錶相連

1/**

2* definition for singly-linked list.

3* public class listnode

7* }8*/

9public

class

solution

18return

pa;19

}20 }

view code

(3)使兩個鍊錶長度相等,迴圈依次比較

3.用快慢指標獲取中間結點

1/**

2* definition for singly-linked list.

3* public class listnode

7* }8*/

9public

class

solution 20}

2122

return

slow;23}

24 }

view code

通過找到中間結點的方法,也可以藉此判斷該鍊錶是否是回文

1/**

2* definition for singly-linked list.

3* public class listnode

7* }8*/

9public

class

solution

19 slow =reverselist(slow);

20while(slow!=null)21

29}30return

true;31

}32public

listnode reverselist(listnode head)

41return

prev;42}

43 }

view code

C 快慢指標的應用

快慢指標的應用 1 判斷單鏈表是否存在環 如果鍊錶是乙個環,就好像操場的跑道是乙個環一樣,此時快慢指標都從煉表頭開始遍歷,快指標每次向前移動兩個位置,慢指標每次向前移動乙個位置 如果快指標到達null,說明鍊錶以null為結尾,沒有環。如果快指標追上慢指標,則表示有環。如下 bool hascirc...

快慢指標的常見應用

快慢指標 快慢指標是解決陣列和鍊錶問題的常用方法,該方法也被稱為 龜兔演算法 從名稱就可以看出氣基本思想是使用兩個指標以不同的速度在陣列或鍊錶中移動。在處理迴圈鍊錶或陣列時,此方法非常有用。快慢指標的應用 1 判斷單鏈表是否存在環 如果鍊錶存在環,就好像操場的跑道是乙個環形一樣,此時讓快慢指標都從煉...

快慢指標在鍊錶的應用

快慢指標中的快慢指的是移動的步長,即每次向前移動速度的快慢。例如可以讓快指標每次沿鍊錶向前移動2,慢指標每次向前移動1次。1 判斷單鏈表是否為迴圈鍊錶 演算法 讓快慢指標從煉表頭開始遍歷,快指標向前移動兩個位置,慢指標向前移動乙個位置 如果快指標到達null,說明鍊錶以null為結尾,不是迴圈鍊錶。...