用快慢指標的思想:-快慢指標的原理:快指標走兩步,慢指標只走一步。
如果這個鍊錶是乙個環,那麼快指標和慢指標總會相遇的。
假設快慢指標之間相差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...