測試鍊錶是否打環 C語言

2021-10-02 21:46:56 字數 983 閱讀 3680

這裡 有乙個 比較 簡單 的 解法。 設定 兩個 指標 p1、 p2。 每次 迴圈 p1 向前 走 一步, p2 向前 走兩步。 直到 p2 碰到 null 指標 或者 兩個 指標 相等 時 結束 迴圈。 如果 兩個 指標 相等, 則 說明 存在 環。

bool whetherlistloop(st_datanode * head)	

bool rst = false; /* 預設不是打環的 */

st_datanode * pos1 = null, * pos2 = null;

pos1 = pos2 = head;

if(null == pos1->next)

while(null != pos1 && null != pos1->next)

} if(pos1 == pos2)

out:

return rst;

}void testwhetherlopp(void) else

tail = ghead;

while(tail->next != null)

tail->next = ghead;

rst = whetherlistloop(ghead);

if(rst) else

tail->next = null;

dumplist(ghead);

return;

}

gcc listmain.c list.c -o a.exe -ddebug

*****= testwhetherlopp **********=

not loop

list loop

*****==== dump list 0x76d090 **********=

0 4 6 19 22 29 32 47 53 116

***********************************

單向鍊錶是否有環問題 C

問題描述 在單向鍊錶中,每個結點都包含乙個指向下乙個結點的指標,最後乙個結點的這個指標被設定為空。但如果把最後乙個結點的指標指向鍊錶中存在的某個結點,就會形成乙個環,在順序遍歷鍊錶的時候,程式就會陷入死迴圈。如何檢測乙個鍊錶中是否有環,如果檢測到環,如何確定環的入口點 即求出環長,環前面的鏈長 一種...

判斷鍊錶是否有環,入口節點以及環的大小(C )

這篇部落格對上述問題有詳細的解釋 判斷鍊錶中是否有環 有關單鏈表中環的問題 這裡只做c 的乙個 實現,主要包含構建環形鍊錶,判斷是否有環以及環的大小。include include using namespace std struct node node creatcircularlist newn...

C語言 C 之鍊錶實現約瑟夫環

本人計算機剛入門,老師看我們學習程式設計太慢就布置了幾個經典程式設計任務,限期完成,其中包括約瑟夫環問題。多方複習反覆琢磨終於親自work out,老師說需要free一下記憶體麻煩看到的朋友指點指點,因為我第一步的資料後面還需要用到,不知道怎麼free。include include define ...