自己實現乙個雙向鍊錶

2021-10-21 14:57:50 字數 2537 閱讀 9900

雙向鍊錶和單向鍊錶不同的是雙向鍊錶中不僅有next指向, 還有pre這個指向, 分別指向了該節點的前乙個節點和後乙個節點, 這樣比單向鍊錶操作起來更方便.

class

twonode

}public

class

mylinkedlist

// 0. 求鍊錶長度

public

intlength()

// 1. 頭插

public

void

addfirst

(int val)

//非空鍊錶

newnode.next = head;

head.pre = newnode;

head = newnode;

length++

;return;}

// 2. 尾插

public

void

addlast

(int val)

//非空鍊錶

tail.next = newnode;

newnode.pre = tail;

tail = newnode;

length++

;return;}

// 3. 任意位置插入元素

public

void

add(

int index,

int val)

if(index ==0)

else

if(index == length)

twonode newnode =

newtwonode

(val)

;//一般情況需要先找到下標為index的節點

twonode nextnode =

getnode

(index)

; twonode prenode = nextnode.pre;

prenode.next = newnode;

newnode.pre = prenode;

nextnode.pre = newnode;

newnode.next = nextnode;

length++

;return;}

// 4. 頭刪

public

void

deletefirst()

else

if(head.next == null)

twonode nextnode = head.next;

nextnode.pre = null;

head = nextnode;

length--

;return;}

// 5. 尾刪

public

void

deletelast()

else

if(head.next == null)

twonode prenode = tail.pre;

prenode.next = null;

length--

;return;}

// 6. 按值刪

public

void

deletebyvalue

(int val)

deletebyindex

(index)

;return;}

// 7. 按下標刪

public

void

deletebyindex

(int index)

if(index ==0)

if(index == length-1)

twonode cur =

getnode

(index)

; twonode prenode = cur.pre;

twonode nextnode = cur.next;

prenode.next = nextnode;

nextnode.pre = prenode;

length--

;return;}

// 8. 修改元素

public

void

set(

int index,

int val)

twonode toset =

getnode

(index)

; toset.val = val;

return;}

// 9. 查詢元素

public

intindexof

(int value)

cur = cur.next;

}return-1

;}// 10. 查詢節點

private twonode getnode

(int index)

twonode cur = head;

for(

int i =

0; i < index; i++

)return cur;

}}

乙個雙向鍊錶的實現

本來是想改改算了,最後變成全部重寫。既然都是自己寫的,也算是原創吧!struct node node intval,node nextnode,node priornode data val next nextnode prior priornode node headnode new node n...

乙個簡單的雙向鍊錶(C 實現)

直接上 親測有用。ifndef dlink h define dlink h phead index0 index1 index2 phead phead index0 index1 index2 phead phead 不儲存資料。index是從0開始的。count index 1 templat...

乙個雙向鍊錶排序問題

題目 建立乙個長度為n的帶頭結點的雙向鍊錶,使得該鍊錶中的資料元素遞增有序排列。必須使用雙向鍊錶完成,資料型別為整型。思路 根據題目建立好該雙向鍊錶 尾插法 然後用個指標依次查詢,先從第乙個節點往後走,找出最大節點max,再將max和最後乙個元素交換,第一遍結束 即奇數遍正向查詢 第二遍,從最後乙個...