單向鏈表:
由兩部分組成:數據域和指針域,每個結點都有一個指針,每個節點指針的指向都是指向自身結點的下一個結點,最后一個結點的head指向為null,對單鏈表的操作只能從一端開始,如果需要查找鏈表中的某一個結點,則需要從頭開始進行遍歷。
雙向鏈表:
對於雙向鏈表來說,它的每個節點要指向“直接前驅”和“直接后繼”,所以節點類需要含有兩個指針域。指向直接前驅的指針使用pre表示,指向后繼的指針使用next表示。雙向鏈表是在單向鏈表基礎上的一個改進,每個節點指向其直接前驅和直接后繼節點。因此,從雙向鏈表的任意位置開始,都能訪問所有的節點。
雙向鏈表從節點的結構上可以看出,雙向鏈表的所需的存儲空間大於單向鏈表。同時,對於插入和刪除等操作來說,雙向鏈表的節點操作更加復雜,涉及到節點的前后兩個節點。
代碼實現可見:https://zhuanlan.zhihu.com/p/109926262
|
|
單向鏈表 |
雙向鏈表 |
| 查找 |
只能找到后繼 |
找到前驅和后繼 |
| 遍歷 |
只能從頭到尾遍歷,但遍歷時候不會死循環 |
可進可退,但遍歷復雜 |
| 增刪節點 |
增加刪除節點簡單 |
增加刪除節點復雜 |
| 內存 |
相比較小 |
多分配一個前驅指針存儲空間 |
| 適用場合 |
節點的增加刪除頻繁,內存較小場合 |
需要雙向查找節點值的場合 |
