如何判斷鍊錶有環

2021-05-25 04:30:15 字數 632 閱讀 4250

假設存在環, 環前共l個節點, 環中共c個節點.

設乙個慢指標起始位置為a, 速度為1, 快指標起始位置為b, 速度為2.

t時間後, 二者相遇, 可列方程:

(a+t-l)mod c == (b+2*t-l)mod c

即t=a-b(mod c), 該模線性方程必定有解.

所以無論a, b的起始位置如何, 二者總是會相遇的.

struct node

int data;

node* next;

void check_chain_circle(node* temp)

node* head1=temp;

node* head2=temp;

while(head1->next!=head2->next->next)

head1=head1->next;

head2=head2->next->next;

if(head1==null||head2==null)

printf("no circle!/n");

return;

printf("yes, the chain has circle!/n");

return;

2011-04-27     16:04:29

如何判斷鍊錶有環?

題目描述 如果有乙個單向鍊錶,鍊錶當中有可能出現 環 就像下圖這樣,如何判斷這個鍊錶是有環鏈表?方案一 暴力法 從頭節點,依次遍歷單鏈表的每乙個節點,每到乙個新的節點就頭節點重新遍歷之前的所有的節點,對比此時的節點,如果相同,證明該節點遍歷過兩次,以此說明鍊錶是有環的 偽 node p head.n...

如何判斷鍊錶有環?

參考 程式設計師小灰 參考2 漫畫演算法 如何判斷鍊錶有環?package chapter5.part2 public class linkedlistcycletest else private static boolean iscycle node head return false priva...

如何判斷鍊錶有環

題目描述 有乙個單向鍊錶,鍊錶中有可能出現 環 如下圖,那麼,如何用程式來判斷該鍊錶是否為有環鏈表呢?方法一 從頭節點開始遍歷每乙個節點,每遍歷乙個新節點就從頭檢查到新節點之前的所有節點,如果和該新節點的值有重複,則證明該節點被遍歷過兩次,鍊錶有環 如果不存在與新節點相同值的節點,就繼續遍歷下乙個新...