[優點]
e.g.
我們有一個list是1->2->3->4->5
想要把2刪掉,只要把1的next pointer指向3,然後delete node2就完成了。
若是array的話,在刪除2後,要保持資料的相連性,所以必須要把2後面的人向前移動,要是這個list有一萬個元素,你要移動的東西就相當多了。
[缺點]
壞處也來自於link list的特點:資料的關聯性不是透過記憶體的相鄰,而是透過link。
因此你無法像array一樣透過index計算address從而快速access某個node,你必須用while loop走訪link。
e.g.
我們有一個list是1->2->3->4->5,我有一個pointer指向list head node 1。
現在你想要接觸node 5, 但你根本不知道node 5存在哪個address上,你只能從node 1的link找到node 2,再從node 2的link找到node 3,如此一步步找下去。
現在你想要接觸node 5, 但你根本不知道node 5存在哪個address上,你只能從node 1的link找到node 2,再從node 2的link找到node 3,如此一步步找下去。
ps.當然你可以用混合式的資料結構,也就是link list+hashtable來解決這個問題。這就比較進階了以後再討論。
[總結一下]
優點是只要修改連結就可以改變關係,達到插入/刪除/改變順序。
缺點是由於記憶體不一定相連,所以你要access特定node時,無法計算該node的address。必須要辛苦地從list head node為起點,不停地查看link,找尋下一個node在哪。