每次在插入或刪除某個節點時, 需要處理四個節點的引用, 而不是兩個. 也就是實現起來要困難一些
相對於單向鍊錶, 雙向鍊錶必然占用記憶體空間更大一些. 但是這些缺點和我們使用起來的方便程度相比, 是微不足道的. 既可以從頭遍歷到尾, 又可以從尾遍歷到頭
分析雙向鍊錶的遍歷,新增,修改,刪除的操作思路 ===> **實現
遍歷方和單鏈表一樣,只是可以向前,也可以向後查詢
新增(預設新增到雙向鍊錶的最後)
修改思路和原來的單向鍊錶- -樣。
4)刪除先找到雙向鍊錶的最後這個節點
temp.next = newheronode
newheronode.pre = temp;
(1)因為是雙向鍊錶,因此,我們可以實現自我刪除某個節點
(2)直接找到要刪除的這個節點,比如temp
(3) temp.pre.next = temp.next
(4) temp.next.pre= temp.pre;
**示例
package test;
public
class
doublelinklistdemo
}class
doublelistlist
// 顯示遍歷鍊錶
public
void
list()
// 因為頭結點不能動,因此我們需要乙個互助變數來遍歷
heronode2 temp = head.next;
while
(true
)// 輸出節點
system.out.
println
(temp)
;// 輸出節點後一定要將temp後移,一定小心
temp = temp.next;}}
public
void
add(heronode2 heronode)
// 如果沒有找到最後,將temp後移
temp = temp.next;
}// 當退出迴圈是,temp就指向了鍊錶的最後
// 形成雙向鍊錶
temp.next = heronode;
heronode.pre = temp;
}public
void
addbyorder
(heronode2 heronode)
//位置找到,就在temp的後面插入
if(temp.next.no > heronode.no)
else
if(temp.next.no == heronode.no)
// 後移,遍歷當前鍊錶
temp = temp.next;}if
(flag)
else
temp.next = heronode;
heronode.pre = temp;}}
public
void
update
(heronode2 newheronode)
// 找到需要修改的節點,根據no編號
// 定義乙個輔助變數
heronode2 temp = head.next;
// 表示是否找到該節點
boolean flag =
false
;while
(true)if
(temp.no == newheronode.no)
temp = temp.next;
}// 根據flag判斷是否找到要修改的節點
if(flag)
else
}// 從雙向鍊錶中刪除節點
// 1、對於雙向鍊錶,我們可以直接找到要刪除的節點
// 2、找到後,自我刪除即可
public
void
del(
int no)
// 輔助變數
heronode2 temp = head.next;
// 標誌是否找到待刪除節點
boolean flag =
false
;while
(true)if
(temp.no == no)
// temp後移,遍歷
temp = temp.next;
}// 判斷flag
if(flag)
}else}}
// 定義乙個heronode類,每個heronode物件就是乙個節點
class
heronode2
// 為了顯示方便,我們重寫tostring方法
@override
public string tostring()
';}}
資料結構之雙向鍊錶
簡述 指標域有乙個指標 而言,占用資源更大,但相應的 雙向鍊錶遍歷的時候只需要乙個指標就可以,而且 只有得到其中任何乙個節點就是得到整個鍊錶,單向鍊錶必須得到他的頭節點,才能遍歷整個鍊錶,而且得有兩個指標。實現 bothwaylinklist.h ifndef mymodule h define m...
資料結構之 雙向鍊錶
單鏈表的結點都只有乙個指向下乙個結點的指標。單鏈表的資料元素無法直接訪問其前驅元素。建立鍊錶 銷毀鍊錶 獲取鍊錶長度 清空鍊錶 獲取第pos個元素操作 插入元素到位置pos 刪除位置pos處的元素 dlinklist dlinklist creat 建立乙個鍊錶 void dlinklist des...
資料結構之雙向鍊錶
雙向鍊錶宛如一列火車,剛發明的時候只有乙個頭,如果它的行駛路線為 a b c d e f g h i j k a 這個時候有一批貨物需要從k運到j,那麼它的運輸路線一定是 k a b c d e f g h i j 所以後來火車就有了兩個頭,由此可見雙向鍊錶的重要性!雙向鍊錶 在單鏈表結點上增添了乙...