鍊錶相關面試題(基礎篇)
鍊錶是一種常見的基礎資料結構,是一種線性表,是一種物理儲存單元上非連續、非順序的儲存結構。鍊錶由一系列節點組成,節點可以在執行時動態生成。每個節點包括儲存資料元素的資料域和儲存下乙個節點位址的指標域兩個部分。相比於線性表順序結構,操作複雜。資料元素的邏輯順序也是通過鍊錶中的指標鏈結次序實現的。
線性表的鏈式儲存特點是用一組任意的儲存單元儲存線性表的資料元素(這組儲存單元可以是連續的,也可以是不連續的)。因此為了表示每個資料元素與其直接後繼資料元素間的邏輯關係,對資料元素來說,除了儲存其本身的資訊外,還需儲存乙個指示其直接後繼的資訊(即直接後繼的儲存位置),由這兩部分資訊組成乙個「節點」,表示線性表中乙個資料元素。線性表的鏈式儲存表示,有乙個缺點就是要找到乙個數,必須從「頭」開始找。
節點結構
1.頭插
頭插:插入新節點。更新頭指標
2.尾插
找到最尾節點,在其後鏈結新的節點
3.頭刪
刪除頭結點,更新頭結點
4.尾刪
找到最尾節點,刪除,修改新的尾節點使其指向空
5.從尾到頭列印單鏈表
借助棧實現
6.反轉單鏈表
7. 刪除乙個無頭單鏈表的非尾節點
8.查詢節點
9.在無頭單鏈表的乙個節點前插入乙個節點
10.排序
11.合併兩個有序鍊錶使合併後的鍊錶依然有序(採用遞迴實現)
12.單鏈表實現約瑟夫環
時間複雜度較高的一種演算法,使用環形單鏈表來模擬圓圈,實現
時間複雜度較低的演算法考慮約瑟夫環的特性
13.查詢單鏈表的中間節點,要求只能遍歷一次鍊錶
14.查詢單鏈表的倒數第k個節點,要求只能遍歷一次鍊錶
15.兩個鍊錶的第乙個公共節點(即判斷兩鍊錶相交)
兩個鍊錶若相交,則從相交點起之後的節點都相同。開始的時候寫了被注釋處的**,覺得重複的地方太多,就又改了。
完整**和測試用例的位址
鍊錶相關面試題
原文及參 題一 給定單鏈表,檢測是否有環。擴充套件 怎麼快速檢測出乙個巨大的鍊錶中的死鏈?或者如何找出乙個單鏈表的中間節點?題二 給定兩個單鏈表 head1,head2 檢測兩個鍊錶是否有交點,如果有返回第乙個交點。題三 給定單鏈表 head 如果有環的話請返回從頭結點進入環的第乙個節點。要點 如果...
各種面試題 鍊錶相關
1.判斷是否有環 bool existcircle listnode head return false 2.找環的起始位置 這個在紙上畫個環就能看出相遇的地方到起始位置與表頭到起始位置的距離是相等的。所以相遇後把乙個放到頭去再相遇就好了。listnode findcirclestart listn...
鍊錶相關的熱點面試題(一)
先把相關的題目給出來 1.從尾到頭列印單鏈表 2.刪除乙個無頭單鏈表的非尾節點 3.在無頭單鏈表的乙個非頭節點前插入乙個節點 4.逆置 反轉單鏈表 5.單鏈表排序 6.合併兩個有序鍊錶,合併後依然有序 7.查詢單鏈表的中間節點,要求只能遍歷一次鍊錶 先把單鏈表結構給出來 templatet stru...