1.迴圈鍊錶的特點是收尾相接,沒有頭指標,也沒有尾指標。如果去遍歷迴圈鍊錶,則是死迴圈。
2.這裡判斷迴圈鍊錶的方法是; 用兩個指標,乙個指標是塊指標(跳乙個節點遍歷),遍歷快(p=p->netxt->next),乙個指標逐步遍歷,慢指標。
如果在遍歷當中,如果發現這兩個指標有可能是出現null指標的話,那邊它是單鏈表。否則是單鏈表(本來這個證明已經夠了,但如何讓死迴圈的函式停止,給我們乙個返回乙個迴圈鍊錶的結構呢?這裡的方法是:如果在迴圈鍊錶中,慢指標一定可能和快指標重疊,(類似於運動員超跑一樣)。
typedef struct node
node,*pnode;
int is_clink( pnode p) }
/*做乙個小改進,優化一下**結構如下:*/
int is_clink( pnode p)
printf("this is linklist\n");
return 1
}
判斷乙個鍊錶是空鍊錶還是迴圈鍊錶
原文 使用快慢指標判斷的好處是 可以防止如果鍊錶是類似 6 的,形狀,也就是說尾指標不是直接連到頭指標,而是它之後的指標,那麼這種情況下傳統的以頭指標作為基準判斷是否有迴圈的方法就可能陷入死迴圈。給定乙個鍊錶,它可能是以null結尾的非迴圈鍊錶,如圖3 5所示 也可能是乙個迴圈結構結尾的迴圈鍊錶。已...
迴圈鍊錶 迴圈雙鏈表 迴圈單鏈表
迴圈單 雙鏈表,建立 初始化 尾插 頭插 遍歷 插入 刪除 判空 部分函式採用過載 此處為c include include include using namespace std typedef struct lnodelnode,linklist typedef struct dnodednod...
如何判斷乙個單鏈表是否有環
題目要求 給定乙個單鏈表的頭指標head,要求寫乙個函式判斷這個單鏈表是否是乙個有環單鏈表。單鏈表中的節點定義如下 struct listnode 方法1 首先定義乙個mapmap,然後從單鏈表的頭指標開始往後遍歷,每次遇到乙個指標p,就判斷map pcur 是否為0,若為0,則將map pcur ...