鍊錶 Linked List(雙向鍊錶)

2021-10-05 08:36:26 字數 3216 閱讀 2460

單鏈表與雙鏈表的區別

單向鍊錶,查詢的方向只能是乙個方向,而雙向鍊錶可以向前或者向後查詢。

單向鍊錶不能自我刪除,需要靠輔助節點,而雙向鍊錶,則可以自我刪除,所以單鏈表刪除節點時,總是找到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 鍊錶

線性表是一種簡單的資料結構,其主要特點是元素之間存在 一對一 的關係,除去第乙個元素,每個元素都存在唯一乙個 前驅節點 除去最後乙個元素都存在唯一乙個 後繼節點 簡單的線性表有 陣列 單鏈表 雙向鍊錶 靜態鍊錶等。順序表 陣列 優缺點 陣列不僅邏輯上,物理上位置也相鄰,可隨機訪問,但刪除或插入元素時...