判斷單鏈表是否存在回環原理很簡單,即假設有兩個指標p1,p2。在每次迴圈的時候,p1先走一步,p2走兩步,直到p2碰到空指標或兩者相等時迴圈結束,如果兩個指標相等則說明存在回環。
注釋掉的話,,最後的輸出結果均為0,表明不存在回環。輸出結果如下:#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;//回環連線到第二個節點
判斷單鏈表是否存在回環
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...