面試筆試系列之二 鍊錶相關

2021-04-20 01:14:26 字數 927 閱讀 8209

下面有code的地方都經過了驗證的 :)

list 的定義

typedef struct list;

1. 反轉乙個鍊錶,迴圈演算法。

list * reserve_list_by_recurrence(list *l)

l->next = 0;

return l_item;

}2. 反轉乙個鍊錶,遞迴演算法。

list * reserve_list_by_recursion(list* p_l, list *l, list *n_l)

else

}3. 判斷乙個鍊錶是否有迴圈。

思路有些意思,code比較簡單,就不列code了。

方法1:快慢法,乙個以步長為1遍歷,乙個以步長為2遍歷,next為空前相遇即為迴圈鍊錶。

方法2:破環結構法,遍歷鍊錶,修改煉表項的某些結構,通常修改next指標,如果遍歷完之前,發現有鍊表項已經修改,則為迴圈鍊錶。

當然還有更愚蠢的方法3,就不獻醜了 :)

4. 兩個鍊錶,一公升一降,合併為乙個公升序鍊錶。

沒有什麼技巧,不寫code了。

5. 在雙向鍊錶中刪除指定元素。

同上 :)

ps. 一些陣列相關的也放在這裡吧。

1. 乙個陣列,下標從0到n,元素為從0到n的整數。判斷其中是否有重複元素。

定義了個字串陣列,方便返回結果:

char *check_array_repeat_str[3] = ;

printf ("%s", check_array_repeat_str[check_array_repeat(a, 10)]);

函式:int check_array_repeat(int a, int n)

if (*(flag_array+a[i]) == 1)

else

}return 0;

}

鍊錶相關筆試題 一

1.從尾到頭列印單鏈表 方法一 可以用棧實現,遍歷鍊錶,每經過乙個結點,把該結點放入棧中,當遍歷完整個鍊錶後,從棧頂開始逐個輸出結點的值,此時輸出的結點的順序就反轉過來了 實現 void printtailtohead listnode phead while nodes.empty 方法二 用遞迴...

鍊錶相關面試題

原文及參 題一 給定單鏈表,檢測是否有環。擴充套件 怎麼快速檢測出乙個巨大的鍊錶中的死鏈?或者如何找出乙個單鏈表的中間節點?題二 給定兩個單鏈表 head1,head2 檢測兩個鍊錶是否有交點,如果有返回第乙個交點。題三 給定單鏈表 head 如果有環的話請返回從頭結點進入環的第乙個節點。要點 如果...

各種面試題 鍊錶相關

1.判斷是否有環 bool existcircle listnode head return false 2.找環的起始位置 這個在紙上畫個環就能看出相遇的地方到起始位置與表頭到起始位置的距離是相等的。所以相遇後把乙個放到頭去再相遇就好了。listnode findcirclestart listn...