雙向鍊錶和擔心鍊錶的區別
單向鍊錶,查詢的方向只能是乙個方向,而雙向鍊錶可以向前或者向後查詢。
單向鍊錶不能自我刪除,需要靠輔助節點 ,而雙向鍊錶,則可以自我刪除,所以前面我們單鏈表刪除時節點,總是找到temp,temp是待刪除節點的前乙個節點.
單向鍊錶
雙向鍊錶
1.遍歷方法和 單鏈表一樣,只是可以向前,也可以向後查詢
思路:判斷鍊錶是否為空
建立乙個臨時變數,遍歷鍊錶
//列印雙向鍊錶
public
void
list()
//因為head節點不能動,所以需要輔助節點,幫助找到尾節點
dnode temp = head.next;
while
(true
)//列印鍊錶資訊
system.out.
println
(temp)
;//繼續遍歷鍊錶
temp = temp.next;
}}
2.新增 (預設新增到雙向鍊錶的最後)
先找到雙向鍊錶的最後這個節點
temp.next = newnode
newnode.pre = temp;
//新增節點到最後
public
void
add(dnode node)
//如果不是最後乙個節點,把temp向後移動一位
temp = temp.next;
}//退出while迴圈時,temp就指向了鍊錶的最後
//形成雙向鍊錶
temp.next = node;
node.pre = temp;
}
3.修改雙向鍊錶的內容
思路:先判斷鍊錶是否為null
建立乙個臨時變數temp遍歷鍊錶
遍歷鍊錶找到對應的節點,修改節點的值
//雙向鍊錶:指定位置修改鍊錶的內容和單鏈表一樣
public
void
updata
(int num,dnode node)
//根據節點編號num,找到需要修改的節點,
//定義乙個輔助變數
dnode temp = head.next;
boolean flag =
false
;//表示是否找到該節點
while
(true)if
(temp.num == node.num)
temp = temp.next;
}//根據flag,判斷是否修改節點內容
if(flag)
else
}
4.刪除
(1) 因為是雙向鍊錶,因此,我們可以實現自我刪除某個節點
(2) 直接找到要刪除的這個節點,比如temp
//雙向鍊錶:刪除指定節點
/* 1. 對於雙向鍊錶,我們可以直接刪除這個節點
2.找到該節點進行自我刪除
*/public
void
remove
(int num)
dnode temp = head.next;
boolean flag =
false
;//表示是否找到要刪除的節點
while
(true)if
(temp.num == num)
temp = temp.next;
}//判斷flag
if(flag)
}else
}
資料結構 鍊錶 雙向鍊錶
注意typedef的定義結構,以及dinklist的資料型別 typedef struct dnode dnode,dinklist 注意插入第乙個結點時,prior指標的空指向問題 if l next null 若l後繼結點為空 則省略該步驟 l next prior p 基本 頭插法建立雙向鍊錶...
資料結構 雙向鍊錶
前幾天寫了乙個單向鍊錶,今天參考自己單向鍊錶改寫了乙個雙向非迴圈鍊錶,下面只討論雙向非迴圈鍊錶。雙向非迴圈鍊錶有如下特點 一 雙向鍊錶每個結點都有乙個前驅指標和後驅指標 當然頭結點和尾結點除外 二 雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。三 頭結點只有後驅指標沒有前驅...
資料結構 雙向鍊錶
單鏈表的單向性 只能從頭結點開始高效訪問鍊錶中的資料元素。單鏈表還存在另乙個缺陷 逆序訪問時候的效率極低。如下 linklistlist for int i 0 i 5 i for int i list.length 1 i 0 i 根據大o推算法可以得出乙個for迴圈的時間複雜度為o n get ...