單鏈表與雙鏈表的區別
單向鍊錶,查詢的方向只能是乙個方向,而雙向鍊錶可以向前或者向後查詢。
單向鍊錶不能自我刪除,需要靠輔助節點,而雙向鍊錶,則可以自我刪除,所以單鏈表刪除節點時,總是找到temp的下乙個節點來刪除的
雙鏈表doublelinkedlist
大部分**與單鏈表的例項相同:單鏈表例項:單擊前往
同理先建立乙個node節點類。區別在於需要新增乙個指向前乙個節點的變數pre;
class
node2
@override
public string tostring()
}
在doublelinkedlist雙向鍊錶類當中初始化乙個頭節點,和乙個返回頭結點的方法
// 初始化乙個頭節點,頭節點不存放資料
private node2 headnode =
newnode2(0
,"",""
);public node2 gethead()
遍歷雙向鍊錶 :與單鏈表一致從頭到尾遍歷
// 遍歷雙向鍊錶
public
void
list()
node2 temp = headnode.next;
// 輔助變數,
while
(true
)// 不為空,輸出節點資訊
system.out.
println
(temp)
;// 後移
temp = temp.next;
}}
新增節點到雙向鍊錶 :在單鏈表的基礎上將新增節點的pre指向原來最後乙個節點。
public
void
add(node2 n)
temp = temp.next;
}// 新增節點,雙向鍊錶
temp.next = n;
n.pre = temp;
}
新增節點到雙向鍊錶:按編號順序新增 在這裡按照單鏈表的思路:只需要將往前指的指標進行指向即可:如下圖紅線所示:
// 新增方法,排序
public
void
addorderby
(node2 n)
if(temp.next.no > n.no)
else
if(temp.next.no == n.no)
// 後移輔助節點用於迴圈遍歷
temp = temp.next;}if
(b)else
}
根據節點的編號修改節點資訊 雙向鍊錶 與單鏈表一致:
public
void
update
(node2 n)
// 找到要修改的節點
node2 temp = headnode.next;
boolean b =
false
;// 判斷找到這個編號節點
while
(true)if
(temp.no == n.no)
// temp後移繼續遍歷
temp = temp.next;}if
(b)else
}
節點刪除 雙向鍊錶 實現自我刪除
public
void
delete
(int n)
node2 temp = headnode.next;
boolean b =
false
;// 是否找到這個n
while
(true)if
(temp.no == n)
temp = temp.next;
// 往下繼續遍歷}if
(b)}
else
}}
定義乙個測試類進行測試:
node2 node1 =
newnode2(1
,"瓜皮1"
,"guapi1");
node2 node2 =
newnode2(2
,"瓜皮2"
,"guapi2");
node2 node3 =
newnode2(3
,"瓜皮3"
,"guapi3");
node2 node4 =
newnode2(4
,"瓜皮4"
,"guapi4");
doublelinkedlist doublelinkedlist =
newdoublelinkedlist()
;doublelinkedlist.
add(node1)
;doublelinkedlist.
add(node2)
;doublelinkedlist.
add(node3)
;doublelinkedlist.
add(node4)
;doublelinkedlist.
list()
;system.out.
println
("修改節點:");
node2 node2hao =
newnode2(2
,"瓜皮2號"
,"guapi2hao");
doublelinkedlist.
update
(node2hao)
;doublelinkedlist.
list()
;system.out.
println
("刪除節點後:");
doublelinkedlist.
delete(1
);doublelinkedlist.
list()
;
結果如下:
手寫 LinkedList(雙向鍊錶)
用於 linkedlist 繼承 param public inte ce mylist public class mylinkedlist implements mylist 1.00 將 element 作為最後乙個節點進行連線 param element void linklast e ele...
LinkedList雙向鍊錶存資料
test public void testlinkedlist private static class node 1 如果之前沒有節點,則該節點即為頭結點也為尾節點,next為空 2 如果有前置節點,則新節點的pre指向前置節點,並將將前置節點的next指向新節點 public boolean a...
LinkedList 鍊錶
線性表是一種簡單的資料結構,其主要特點是元素之間存在 一對一 的關係,除去第乙個元素,每個元素都存在唯一乙個 前驅節點 除去最後乙個元素都存在唯一乙個 後繼節點 簡單的線性表有 陣列 單鏈表 雙向鍊錶 靜態鍊錶等。順序表 陣列 優缺點 陣列不僅邏輯上,物理上位置也相鄰,可隨機訪問,但刪除或插入元素時...