判斷單鏈表中是否存在回環

2021-08-01 23:25:32 字數 1102 閱讀 5707

判斷單鏈表是否存在回環原理很簡單,即假設有兩個指標p1,p2。在每次迴圈的時候,p1先走一步,p2走兩步,直到p2碰到空指標或兩者相等時迴圈結束,如果兩個指標相等則說明存在回環。

#include using namespace std;

#include struct node

;node *create()

new=(node *)malloc(sizeof(node));

new->data=data;

if(++j==1)

else

q=new; }

new->next=null;

return head;

}int length(node *head)

return len;

}void print(node *head)

do while(p2 && p2->next && p1!=p2);

if(p1==p2)

else

return false;

}int main()

{ node *head;

head=create();

print(head);

coutnext->next;//使第四個節點為回環開始位置

start->next=head->next;//回環連線到第二個節點

node *loopstart=null;

isloop=islooplist(head,&loopstart);

cout<

在上面主函式的情況下,手動設定了第四個節點為回環的開始位置,並將回環愛你接到第二個節點。最後的輸出均為1,表明存在回環。

執行結果如下:

將主函式中

start->next=head->next;//回環連線到第二個節點

注釋掉的話,,最後的輸出結果均為0,表明不存在回環。輸出結果如下:

判斷單鏈表是否存在回環

author victor lv date 2016 9 6 10 14 description 判斷單鏈表是否有回環c c 判斷單鏈表是否存在回環 輸入 list的頭指標 返回 bool true表示有回環,false表示無 解題思想 這裡也是用到兩個指標。如果乙個鍊錶中有環,也就是說用乙個指標去...

單鏈表中判斷是否存在環

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

判斷單鏈表中是否存在環

1 使用快慢指標 慢指標每次移動乙個結點,快指標每次移動兩個結點,快指標移動的快,必將先進入環,待慢指標移動進環內,就有點像追及問題了,快指標移動的快,當 p1 p2 時,就說明快慢指標相遇了,即鍊錶有環。懶得畫圖,就描述一下算了。bool hascycle listnode head return...