C語言實現單鏈表面試題 高階

2021-08-02 16:43:45 字數 1650 閱讀 3777

判斷單鏈表是否帶環?若帶環,求環的入口點

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.適用於需要進行大量增添 刪除元素操作而對訪問元素...