第一次寫部落格,是一枚標準的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...