《劍指offer 之鍊錶題目

2021-06-21 02:07:42 字數 1873 閱讀 7732

這幾天在看《劍指offer>寫的很好,跟july的各有千秋,更加注重歸納總結,筆試面試臨時抱佛腳,決定要啃下這其中的46道題目。ok,把每道題目自己實現,相同的歸成一類。這次把所有的與list相關的題目列出來。

//思路:從尾到頭列印list的話,考慮用stack先把各節點儲存起來,遍歷完以後再將stack彈出列印即可

[cpp]view plain

copy

#include 

void

print_list_reverse(list_node* head)  

while

(!m_list.empty())  

}  [cpp]view plain

copy

void

print_list_reverse_res(list_node* head)  

}  

//void delete_node_o1(list_node* head, list_node* pto_delete)函式形式;可以看出,已經給出了要刪除node的指標,我們可以很方便地找到要刪除node的下乙個node

//將下乙個node的資訊複製到當前node,再將下乙個node刪除,這正好相當於將當前node刪除!時間複雜度是o(1),需要注意的是假設當前node是最後乙個的話

//node->next為空,上面的思路就不行了,我們還是需要找到尾節點的上乙個節點!如果所有鍊錶只有乙個節點,那麼我們將head置空即可。so,**如下:

[cpp]view plain

copy

void

delete_node_o1(list_node* head, list_node* pto_delete)  

else

if(pto_delete == head)  

else

//list尾,沒辦法,要將前乙個節點的m_pnext置為null只能遍歷一次

}  //題目給出乙個list,輸出該鍊錶中倒數第k個節點。

//為符合習慣本題目,從1開始計數,即list的最後乙個節點是倒數第乙個

//思路:使用兩個指標,剛開始同時指向list頭,然後第二個指標p2前進k-1步,然後第乙個指標p1和p2

//同時前進,知道p2到達list尾,這時p1指向倒數第k個節點

[cpp]view plain

copy

list_node* find_k_reverse(list_node* head, 

intk)  

return

p1;  

}  

//給定乙個list,輸入引數是頭結點,要求反轉list,輸出翻轉後list的頭結點

//這類問題,都不難,最好畫畫圖啥的,需要注意的中間需要一些節點儲存指標,要不會造成list的斷裂,需要三個指標,當前指標,當前指標前乙個指標,當前指標後乙個指標

[cpp]view plain

copy

list_node* reverse_list(list_node* head)  

if(p_next == null)

//這個時候p_node就是原來的尾節點

return

p_node;    

}[cpp]view plain

copy

list_node* merge_order_list(list_node* first, list_node* second)  

else

return

p_result;          

}  

劍指offer 鍊錶題目集合

從尾到頭列印鍊錶 class solution 返回從尾部到頭部的列表值序列,例如 1,2,3 def printlistfromtailtohead self,listnode rs if not listnode return rs while listnode listnode listnod...

劍指Offer題目1518 反轉鍊錶

題目1518 反轉鍊錶 時間限制 1 秒 記憶體限制 128 兆 特殊判題 否 提交 3300 解決 1207 題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。hint 請務必使用鍊錶 輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 10...

劍指offer之反轉鍊錶

題目介紹 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。題目比較簡短,所以直接上 public class listnode public class solution listnode curnode head.next head.next null listnode resultnode hea...