雙向鍊錶的實現

2021-10-01 06:43:19 字數 2955 閱讀 6332

管理單項鍊表的缺點分析:

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

2、單向鍊錶不能自我刪除,需要靠輔助節點,而雙向鍊錶,則可以自我刪除,所以前面我們單鏈表刪除節點時,總是找到temp,temp是待刪除節點的前乙個節點

分析雙向鍊錶的遍歷,新增,修改,刪除的操作思路:

1、遍歷方法和單鏈表一樣,只是可以向前,也可以向後

2、新增(預設新增到雙向鍊錶的最後)

(1)先找到雙向鍊錶的最後這個節點

(2)temp.next = newnode;

newnode.pre = temp;

3、修改的思路和原理和單向鍊錶一樣

4、刪除:【要考慮特殊情況:刪除的是最後乙個【必須要判斷刪除的節點是否是最後乙個節點,否則可能會報空指標異常】、刪除的節點不存在】

(1)因為是雙向鍊錶,因此,我們可以實現自我刪除某個節點

(2)直接找到要刪除的節點,比如temp

(3)temp.pre.next = temp.next;

(4)temp.next.pre = temp.pre;

public

class

doublelinkedlistdemo

catch

(exception e)

list.

show()

; system.out.

println

("刪除最後乙個節點====");

list.

delete

(data5)

; list.

show()

;}}class

doublelinkedlist1

/** * 預設新增在雙向鍊錶的末尾

*/public

void

addatlast

(data newdata)

cur.next = newdata;

newdata.pre = cur;

}public

void

addatindex

(data newdata,

int index)

if(head.next == null)

data cur = head;

while

(index--

>0)

newdata.next = cur;

newdata.pre = cur.pre;

cur.pre.next = newdata;

cur.pre = newdata;

}public

void

delete

(data deletedata)

data cur = head.next;

//判斷是否找到了

boolean flag =

false

;while

(cur != null)

flag =

true

;break;}

cur = cur.next;}if

(!flag)

}/**

* 把值為num的節點替換成新的節點

** @param updatedata 新節點

* @param num 原來節點的值

*/public

void

update

(data updatedata,

int num)

data cur = head.next;

while

(cur != null)

cur = cur.next;

} cur.num = updatedata.num;

}public

intsize()

data cur = head.next;

int count =0;

while

(cur != null)

return count;

}public

void

show()

data cur = head;

while

(cur.next != null)}}

class

data

@override

public string tostring()

';}}

輸出結果:

data

data

data

data

data

在第二個位置插入6*****===

data

data

data

data

data

data

把4更新成999**********==

data

data

data

data

data

data

刪除999**********

data

data

data

data

data

刪除888**********

沒有找到節點

data

data

data

data

data

刪除最後乙個節點====

data

data

data

data

另:

/**

* 按照新增的節點的值的大小順序進入鍊錶

* @param newdata 新增的節點

*/public

void

addinorder

(data newdata)

if(cur.next!=null)

else

}}

雙向鍊錶實現

template class link link link pre null,link ne null void operator new size t void operator delete void ptr template link link freelist null template v...

雙向鍊錶實現

雙向鍊錶的應用背景主要是單向鍊錶只能順序訪問,逆序訪問單向鍊錶 尤其是較大的單向鍊錶是一件極其費時費力的工作 相比於單向鍊錶,雙向鍊錶增加了乙個域,這個域裡面增加了乙個指向前驅節點的指標,使得整個鍊錶可以順序訪問或者逆序訪問,來去自如 定義的雙向鍊錶的標頭檔案,裡面包含了雙向鍊錶的宣告和資料型別的定...

實現雙向鍊錶

雙向鍊錶和單向鍊錶相比更加靈活,它的每乙個元素除了本身的值以為擁有兩個指標,分別指向上乙個和下乙個節點。維護成本上要高於單向鍊錶。鍊錶的大部分操作依賴於遍歷,這一方面雙向鍊錶會效率會好一些,可以根據查詢下標的位置從而選擇從煉表頭開始遍歷還是從鍊錶尾開始遍歷。返回元素個數 public intsize...