C語言實現單鏈表面試題 高階(帶環問題)

2021-08-02 11:38:12 字數 2069 閱讀 8048

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

2.判斷兩個鍊錶是否相交,若相交,求交點。(假設鍊錶不帶環)

3.判斷兩個鍊錶是否相交,若相交,求交點。(假設鍊錶可能帶環)【公升級版】

函式如下:

typedef int datatype;

typedef struct listnode

listnode;

int getcyclelen(listnode* plist);				//求環長度(若無環則返回0)

listnode* iscycle(listnode* plist); //求帶環單鏈表快慢指標相遇點(無環返回null)

listnode* getcycleentry(listnode* plist); //求帶環單鏈表入口點(無環返回null)

listnode* iscrossnocycle(listnode* plist1, listnode* plist2); //判斷2個無環鏈表是否相交

listnode* iscross(listnode* plist1, listnode* plist2); //判定2個鍊錶是否相交(分類討論)

1.判斷是否帶環

思路:快慢指標,若能相遇則帶環

listnode* iscycle(listnode* plist)

} return null;

}

2.求環的長度

思路:從快慢指標相遇點走一圈,用計數器計數

int getcyclelen(listnode* plist)

return count; }

//若meet為空(沒有環),返回0

else

}

3.判斷入口點

思路:設頭結點到入口點距離l,入口點到相遇點距離x,環長度c

因為快指標是慢指標的兩倍,且在相遇點相遇,所以 2(l+x) = l+x+c*n(快指標領先圈數)

解得l=n*c-x

所以從快慢指標相遇點和頭結點一起走,他們的相遇點就是入口點

listnode* getcycleentry(listnode* plist)

return plist;

} else

}

4.無環鏈表相交

思路:計算兩個鍊錶的長度差的絕對值gab,長的鍊錶先移動gab步,然後兩個鍊錶一起走。如果在走到結尾之前相遇了,則該相遇點就是交點

listnode* iscrossnocycle(listnode* plist1, listnode* plist2)

while (cur2)

//移動較長的鍊錶的指標,讓他和短的鍊錶一樣長

int gap = abs(len1 - len2);

if (len1 > len2)

}else

}//一起走,如果中途相等了則有交點

while (plist1)

plist1 = plist1->next;

plist2 = plist2->next;

} }return null;

}

5.任意兩個鍊錶判斷相交:

1) 兩個都不帶環;

2) 其中乙個帶環;

3) 兩個都帶環

listnode* iscross(listnode* plist1, listnode* plist2)

//2.其中乙個帶環,必定不相交

else if ((ent1 == null && ent2) || (ent2 == null && ent1))

//3.兩個都帶環

// 1)不相交

// 2)尾交

// 3)環交

else

else

cur = cur->next;

}return null; //不相交

} }}

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

判斷單鏈表是否帶環?若帶環,求環的入口點 listnode judge band listnode plist 判斷單鏈表是否帶環?若帶環,求環的入口點?if fast next null fast next next null return null fast plist while fast s...

c語言實現單鏈表面試題

首先實現乙個無頭單鏈表 include include include typedef int datatype typedef struct listnode listnode 列印 void printlist listnode plist printf null printf n 尾插 voi...

C語言實現單鏈表面試題(基礎篇)

順序表 1.記憶體中位址連續 2.長度不可變更 3.支援隨機查詢 可以在o 1 內查詢元素 4.適用於需要大量訪問元素的 而少量增添 刪除元素的程式 鍊錶 1.記憶體中位址非連續 2.長度可以實時變化 3.不支援隨機查詢 查詢元素時間複雜度o n 4.適用於需要進行大量增添 刪除元素操作而對訪問元素...