那些年我們面試過的單鏈表演算法總結(一)

2021-06-22 14:39:02 字數 1107 閱讀 3641

第一次寫部落格,是一枚標準的greenhorn,誠惶誠恐,不過人生總有那許多第一次,下定決心就要努力堅持做下去。 好了廢話少說,切入正題。

我們在面試找工作的時候經常會遇到各種各樣的單鏈表相關的題目,題目本身並不難,但還是會有一些tricky的地方,現將我在複習和面試過程中遇到的關於單鏈表相關的問題做個總結。

首先我們來定義單鏈表的資料結構

struct listnode

;

題目1:在單鏈表的尾部插入乙個新的節點

while( head -> next != null)

head -> next = newtail;}

題目2:給定乙個結點以及頭指標從鍊錶中刪除該節點

void removenode(struct listnode **phead, struct listnode *node)

while(head != null && head->next != node)

if( head == null)

return;

else

}

題目3:單鏈表取中點並返回該結點指標

struct listnode * getmiddlenode(struct listnode *head)

return slownode;

}

題目4:單鏈表取距離尾結點n的結點

struct listnode * getnthnodefromtail(struct listnode *head, int n)

if(fastnode == null) return slownode;

slownode = head;

while(fastnode->next != null)

return slownode;

}

題目5:單鏈表反序,並返回新鍊錶的頭指標

struct listnode *reverselist(struct listnode *head)

return newhead;

}

致我們終將忘記的演算法(單鏈表那些事)

1 乙個單鏈表l0 l1 l2 ln 1 ln,翻轉鍊錶使其成為l0 ln l1 ln 1.不能通過改變結點的值來實現 解題方法 找到鍊錶的中間結點,斷開鍊錶,把後半部分鍊錶reverse一下,再合併兩個單鏈表。演算法的時間複雜度為o n 空間複雜度為o 1 listnode reverse lis...

那些年我們遇到的c面試題

1.這是一道關於結構體對齊補齊的題 在32為ibm pc機上使用c語言,若有如下定義 structaa 則變數a所占用的位元組數和成員布局為 c char,s short,i int,x 填充位元組 a.9,cssssiiii b.10,cxssssiiii c.12,cxssssxxiiii d....

面試演算法題 單鏈表的快速排序實現

面試時被問到單鏈表快速排序的問題,回來仔細實現下,面試時細節沒有處理好只說出來一些思想。本人菜鳥請大家指教。include using namespace std typedef struct linklist listpoint void quicksort linklist head,linkl...