用兩個指標,乙個快指標一次走兩步,乙個慢指標一次走一步。快慢指標可以重合表示鍊錶有環,此時距離環起點的距離和起點距離環起點的距離相等。
#include "bits/stdc++.h
"using
namespace
std;
struct
list ;
list* beginofcircle(list* p1, list*p2)
return
p1;}
list* hascircle(list*head)
}return
null;
}list*init()
intmain() else
*/int
n, m;
scanf(
"%d %d
", &n, &m);
head =init();
now =head;
while (--n)
ans =now;
if (m == 0
) else
return0;
}while (--m)
now->next =ans;
res =hascircle(head);
if (res ==ans)
else
return0;
}
main函式裡為驗證,可以輸入環起點的編號n和乙個環的長度m。最後返回的結果等於環起點輸出「yes」,當鍊表中無環的情況下返回null輸出結果為「no」;
有環鏈表問題 確定有環鏈表的環起點,環長及柄長
include include using namespace std struct linknode typedef linknode linklist void insertlist linklist list int data 插入 建立 鍊錶 else circlestart是環的起點,ci...
求有環單鏈表中的環長 環起點 鍊錶長
1.判斷單鏈表是否有環 使用兩個slow,fast指標從頭開始掃瞄鍊錶。指標slow 每次走1步,指標fast每次走2步。如果存在環,則指標slow fast會相遇 如果不存在環,指標fast遇到null退出。就是所謂的追擊相遇問題 2.求有環單鏈表的環長 在環上相遇後,記錄第一次相遇點為pos,之...
求有環單鏈表中的環長 環起點 鍊錶長
求有環單鏈表中的環長 環起點 鍊錶長 1.判斷單鏈表是否有環 使用兩個slow,fast指標從頭開始掃瞄鍊錶。指標slow 每次走1步,指標fast每次走2步。如果存在環,則指標slow fast會相遇 如果不存在環,指標fast遇到null退出。就是所謂的追擊相遇問題 2.求有環單鏈表的環長 在環...