02 判斷乙個鍊錶是否是環形鍊錶 用快慢指標來實現

2021-10-06 00:04:59 字數 1395 閱讀 7922

用快慢指標的思想:

快指標走兩步,慢指標只走一步。

如果這個鍊錶是乙個環,那麼快指標和慢指標總會相遇的。

-快慢指標的原理:

假設快慢指標之間相差n步,

慢指標先走一步,那麼快慢指標相差n+1步

然後快指標走兩步,那麼快慢指標相差n+1-2 = n-1步;

也就是說,每走一次,快慢指標的距離就減少一次;

那麼走到n次的時候,快慢指標的相差就為0.

@inte***ce node : nsobject

@property

(nonatomic, assign)

int value;

@property

(nonatomic, strong) node *next;

@end

(2)快慢指標的實現:

-

(bool)iscyclenode:

(node *

)node

node *slow = node;

node *fast = node.next;

while

(fast != nil && fast.next != nil)

}return no;

}

(3)驗證:

node *node =

[[node alloc] init]

; node *node1 =

[[node alloc] init]

; node *node2 =

[[node alloc] init]

; node *node3 =

[[node alloc] init]

; node *node4 =

[[node alloc] init]

;

node4.value =4;

node3.value =3;

node2.value =2;

node1.value =1;

node.value =0;

node4.next = node3;

node3.next = node2;

node2.next = node1;

node1.next = node;

node.next = node3;if(

[self iscyclenode:node1]

)else

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

給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2 輸...

鍊錶 判斷乙個鍊錶是否為回文鍊錶

思路1 找到中間節點然後把後面的翻轉,需要斷開鍊錶 然後比較和頭節點開始的前段,最後要是後半段的游標可以走到最後說明是回文否則不是 思路2 整體翻轉比較 思路3 借助乙個棧存放前半段的元素,然後和後半段的比較 public boolean ispalindrome listnode head lis...

判斷單向鍊錶是否含有環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。分析 使用雙指標,乙個一次走一步,乙個一次走兩步,當兩者都進入環時,快指標比慢指標始終快一步,所以在有環的情況下兩者肯定會相遇。另外需要特別注意fast最開始不能初始化head應該為head.next不然進去迴圈就全判斷為true。definition for si...