判斷乙個單鏈表中是否存在環

2021-07-26 05:14:15 字數 679 閱讀 5242

#判斷乙個單鏈表中是否存在 環。

#設定兩個指標(fast, slow),初始值都指向頭,slow每次前進1步,fast每次前進2步,

大概的思路如下:

如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。

如果鍊錶不存在環,則fast必定先指向null,而slow後指向null。

如果存在環,則返回1;     否則,返回0

int i***itscircle(list *head)

}return !(fast == null || fast->next == null);

}

根據上面的思路,可以找出環開始出現的地方:slow與fast指標相遇後,讓slow指向head,然後

slow與fast同時設定步長為1進行遍歷,兩者同時指向同乙個節點時就是環開始出現的地方,**如下:

list *findcirclenode(list *head)

while (fast && fast->next)

}if ((null == fast) || (null == fast->next))

slow = head;

while (slow != fast)

return slow;

}

判斷乙個單鏈表是否存在環

這是leetcode上面的一道簡單題 141.linked list cycle 大約半個月前刷到的,當時沒想出來,直接看的solution,提到了hash表和快慢指標兩種演算法,覺得好複雜,然後放著沒有去想了。恰好導師有新的idea讓我試下,所以一放就放到現在,今天終於實現了。開薰。這裡記錄兩種方...

判斷乙個單鏈表中是否存在環 Go

鍊錶的乙個結點的結構體如下 type lnode struct 對於乙個單鏈表,如果他要存在環,那麼至少存在兩個節點,也就是說最後乙個結點的next指向了前面的某個結點。所以在判斷鍊錶是否存在環的時候,我們新增快慢兩個指標fast和slow,fast指標每次向前走兩步,slow指標每次向前走一步,所...

單鏈表中判斷是否存在環

有乙個單鏈表,其中可能有乙個環,也就是某個節點的next指向的是鍊錶中在它之前的節點,這樣在鍊錶的尾部形成一環。1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如果找到環的入口點?擴充套件 判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點。有乙個單鏈表,其中可能有乙個環,也就是某個節點...