雙向鍊錶和單向鍊錶不同的是雙向鍊錶中不僅有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和最後乙個元素交換,第一遍結束 即奇數遍正向查詢 第二遍,從最後乙個...