使用單鏈表查詢的方向只能是乙個方向,而且不能自我刪除,得要依賴乙個輔助節點,
而使用雙向鍊錶就可以解決這些缺點。
單鏈表中的每個節點包含著乙個存放資料的data域,和乙個指向下一節點的next域。下面來實現**:我們在第一篇單鏈表的基礎上進行修改單鏈表的簡單介紹和實現增刪改查
先在heronode類中新新增乙個指向上一節點的pre
建立乙個雙向鍊錶的類,在類中實現增刪改查功能class
heronode
// 為了顯示方法,我們重新tostring
@override
public string tostring()
}
下面是實現按排名的順序新增的方法:// 建立乙個雙向鍊錶的類
class
doublelinkedlist
// 因為頭節點,不能動,因此我們需要乙個輔助變數來遍歷
heronode temp = head.next;
while
(true
)// 輸出節點的資訊
system.out.
println
(temp)
;// 將temp後移, 一定小心
temp = temp.next;}}
/* * 新增方法,先找到雙向鍊錶的最後乙個節點
* temp.next=heronode
* heronode.pre=temp
*/public
void
add(
)// 如果沒有找到最後, 將將temp後移
temp = temp.next;
}// 當退出while迴圈時,temp就指向了鍊錶的最後
// 形成乙個雙向鍊錶
temp.next = heronode;
heronode.pre = temp;}/*
* 修改乙個節點的內容,
* 雙向鍊錶的節點內容修改和單向鍊錶操作一樣
* */
public
void
updata
(heronode heronode)
heronode temp = head.next;
boolean flag =
false
;while
(true)if
(temp.num == heronode.num)
temp = temp.next;}if
(flag)
else
}/* 從雙向鍊錶中刪除乙個節點
* 1 對於雙向鍊錶,我們可以直接找到要刪除的這個節點
* 2 找到後,自我刪除即可
* */
public
void
delete
(int num)
heronode temp = head.next;
// 輔助變數(指標)
boolean flag =
false
;// 標誌是否找到待刪除節點的
while
(true)if
(temp.num == num)
temp = temp.next;}if
(flag)
}else
}}
/*
* 按號碼順序新增方法
*/public
void
addbynum
(heronode heronode)
boolean flag =
false
;while
(true)if
(temp.next.no > heronode.no)
else
if(temp.next.no == heronode.no)
temp = temp.next;}if
(flag)
else
}
雙向鍊錶的增刪改查
package com.mjw.linkedlist 1.遍歷 和單鏈表的思路一致 2.新增 先找到雙向鍊錶的最後 temp.next new heronode newheronode.pre temp 3.修改也是和單鏈表的思路一致 4.刪除 因為是雙向鍊錶,可以自我刪除,直接找到要刪除的結點,比...
雙向鍊錶的增刪改查
雙向鍊錶增刪改查 單向鍊錶查詢的方向只能是乙個方向,而雙向鍊錶可以向前或者向後查詢 單向鍊錶不能自我刪除,需要輔助節點,而雙向鍊錶可以自我刪除,public class doublelinkedlistdemo class doublelinkedlist 遍歷雙向鍊錶的方法,顯示鍊錶 遍歷 pub...
雙向鍊錶實現水滸排行增刪改查
雙向鍊錶與單向鍊錶的不同在於,容易出現空指標異常 在新增時 heronode.pre temp if temp.next null temp.next heronode 如果剛好是最後乙個裡面新增,需要 temp.next!null的限制 在刪除時,有兩種情況 刪除的不是最後乙個節點則 if tem...