判斷單鏈表是否帶環?若帶環,求環的入口點
listnode* judge_band(listnode *plist)//判斷單鏈表是否帶環?若帶環,求環的入口點?
if((fast->next == null) || (fast->next->next == null))
return null;
fast = plist;
while(fast != slow)
return fast;
}
判斷單鏈表是否帶環?若帶環,求環的長度
int judge_band_length(listnode *plist)//求環的長度
else
count++;//環的入口點要加在環長裡
} return count;
}
判斷兩個鍊錶是否相交,若相交,求交點(假設鍊錶不帶環)
listnode* judge_intersect(listnode *plist1, listnode *plist2)//判斷兩個鍊錶是否相交,若相交,求交點。(假設鍊錶不帶環)
while(p2)
if(len1 > len2)
p2 = plist2;
} else
p1 = plist1;
} while(p1 != p2)
return p1;
}}
判斷兩個鍊錶是否相交,若相交,求交點。(假設鍊錶可能帶環)
listnode* judge_band_intersect(listnode *plist1, listnode *plist2)//判斷兩個鍊錶是否相交(假設鍊錶可能帶環)
else if((p1_entrance == null) || (p2_entrance == null))//乙個帶環乙個不帶環
else//兩個都帶環
while(p2 != p2_entrance)
if(len1 >len2)
p2 = plist2;
}else
p1 = plist1;
}while(p1 != p2)
return p1;
} else//都帶環且入口點不相等,判斷是否相交
return null;
} }}
複雜鍊錶的複製,返回新鍊錶的頭節點
typedef struct complexnode //複雜鍊錶的結構體
complexnode;
complexnode* cpye_dif_list(complexnode *plist)//複雜鍊錶的複製,返回新鍊錶的頭節點
tmp->next = creatnode(tmp->data);
newlist = plist->next;
tmp = newlist;
while(plist != null) }
return newlist;
}
測試用例可在檢視 c語言實現單鏈表面試題
首先實現乙個無頭單鏈表 include include include typedef int datatype typedef struct listnode listnode 列印 void printlist listnode plist printf null printf n 尾插 voi...
C語言實現單鏈表面試題 高階(帶環問題)
1.判斷單鏈表是否帶環?若帶環,求環的長度?求環的入口點?2.判斷兩個鍊錶是否相交,若相交,求交點。假設鍊錶不帶環 3.判斷兩個鍊錶是否相交,若相交,求交點。假設鍊錶可能帶環 公升級版 函式如下 typedef int datatype typedef struct listnode listnod...
C語言實現單鏈表面試題(基礎篇)
順序表 1.記憶體中位址連續 2.長度不可變更 3.支援隨機查詢 可以在o 1 內查詢元素 4.適用於需要大量訪問元素的 而少量增添 刪除元素的程式 鍊錶 1.記憶體中位址非連續 2.長度可以實時變化 3.不支援隨機查詢 查詢元素時間複雜度o n 4.適用於需要進行大量增添 刪除元素操作而對訪問元素...