鏈表建議

       鏈表的經典應用場景:LRU緩存淘汰算法
       常見的策略有:先進先出策略FIFO(First in,First out),最少使用策略LFU(Least Frequantly Used),最近最少使用策略LRU(Least Recently Uesd)
       最常見的三種鏈表結構,單鏈表,雙向鏈表和循環鏈表。
       單鏈表中,針對鏈表的插入和刪除操作,只需要考慮相鄰結點的指針改變,對應的時間複雜度爲O(1);想隨機訪問只有遍歷;
       循環鏈表是一種特殊的單鏈表,與單鏈表唯一的區別在於尾結點,單鏈表的尾結點指針是指向空地址,循環鏈表的尾結點是指向鏈表的頭結點。從鏈尾到鏈頭比較方便。
       **雙向鏈表,雙向鏈表需要額外的兩個空間來存儲後續結點和前驅節點的地址,所以,更佔空間,但是也帶來了雙向鏈表的靈活性。
       對於執行較慢的程序,可以通過空間換時間來優化,而消耗過多內存的程序,可以用時間換空間來降低內存的消耗。

       寫鏈表技巧
       1.理解指針或引用的含義,p—>next = q; 表示p節點的後繼指針存儲了q節點的內存地址。p—>next = p—>next—>next; 表示p節點的後繼指針存儲了p節點的下下個節點的內存地址。
       2.警惕指針丟失和內存泄漏(插入節點時,一定注意操作的順序,刪除鏈表節點時,一定記得手動釋放內存空間)
       3.利用哨兵簡化實現難度(把帶有哨兵結點的鏈表叫帶頭鏈表,沒有哨兵結點的鏈表叫做不帶頭鏈表)
       4.重點留意邊界條件處理
一.如果鏈表爲空時,代碼是否能正常運行
二.如果鏈表只包含一個結點時,代碼能否正常工作
三.如果鏈表只包含兩個節點時,代碼是否能夠正常工作
四.代碼邏輯在處理頭結點和尾結點的時候,是否能正常工作。
        5 . 舉例畫圖,輔助思考
        6.多寫多練常見的鏈表操作:
1.單鏈表反轉
2.鏈表中環的檢測
3.兩個有序鏈表合併
4.刪除鏈表倒數第n個節點
5.求鏈表的中間節點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章