1、雙向鍊錶和單向鍊錶之間有什麼區別?
答:雙向鍊錶和單向鍊錶之間最大的區別就是其多了乙個指向前乙個節點的指標域。
2、雙向鍊錶對比於單鏈表有什麼優點?答:
3、雙向鍊錶功能實現時和單向鍊錶有何區別?
答:具體功能實現大體上沒有區別,在遍歷節點和修改節點兩個功能上只需要將節點修改為雙向節點,根本不需要進行其他改動。其次在增加節點和刪除節點時可以直接指向目標節點後再進行操作。
具體實現**:
package com.xiaofan.linkedlist;
public class doublelinkedlistdomo
}//建立乙個雙向鍊錶的類
class doublelinkedlist
// 遍歷雙向鍊錶
// 顯示鍊錶
public void
show()
// 使用temp遍歷鍊錶
heronode2 temp = head.next;
while
(true)
// 輸出節點資訊
system.out.
println
(temp)
; temp = temp.next;}}
// 新增節點
public void
add(heronode2 heronode)
temp = temp.next;
}// 退出迴圈時,temp就指向了鍊錶的最後
// 形成雙向鍊錶
temp.next = heronode;
heronode.pre = temp;
}//按順序新增
public void
addbyorder
(heronode2 heronode)
if(temp.next.no > heronode.no)
else
if(temp.next.no == heronode.no)
temp=temp.next;
}//判斷flag的值
if(flag)
else
}// 修改乙個節點的內容
// 雙向鍊錶的修改操作和單向鍊錶的修改基本一樣,只是節點的型別不一樣
public void
updata
(heronode2 newheronode)
// 找到需要修改的節點,根據no編號
// 定義乙個輔助變數
heronode2 temp = head.next;
boolean flag = false;
// 表示是否找到該節點
while
(true)
if(temp.no == newheronode.no)
temp = temp.next;
}// 根據flag 判斷是否找到需要修改的節點
if(flag)
else
}// 刪除節點
// 說明:對於雙向鍊錶,可以直接找到要刪除的節點
// 找到後,自我刪除即可
public void
delete
(int no)
// 找到需要刪除的節點,根據no編號
// 定義乙個輔助變數
heronode2 temp = head.next;
// 因為可以找到要刪除的節點,可以直接從第乙個有效節點開始
boolean flag = false;
// 表示是否找到該節點
while
(true)
if(temp.no == no)
temp = temp.next;
// 後移遍歷
}// 根據flag 判斷是否找到需要刪除的節點
if(flag)
temp.pre = null;
temp.next = null;
}else}}
//定義heronode2節點,每個heronode物件就是乙個節點
class heronode2
// 為了便於顯示,重寫tostring
@override
public string tostring()
}
資料結構 鍊錶 雙向鍊錶
注意typedef的定義結構,以及dinklist的資料型別 typedef struct dnode dnode,dinklist 注意插入第乙個結點時,prior指標的空指向問題 if l next null 若l後繼結點為空 則省略該步驟 l next prior p 基本 頭插法建立雙向鍊錶...
資料結構與演算法 雙向鍊錶
雖然從表內第乙個節點到最後乙個節點的遍歷操作是非常簡單的,但是反向遍歷鍊錶卻不是一件容易的事情。如果為node類新增乙個欄位來儲存指向前乙個節點的連線,那麼久會使得這個反向操作過程變得容易許多。當向鍊錶插入節點的時候,為了吧資料複製給新的字段會需要執行更多的操作,但是當腰吧節點從表移除的時候就能看到...
資料結構與演算法 雙向鍊錶
typedef struct lineline line initline line head return head line insertline line head,int data,int add else 判斷條件為真,說明插入位置為鍊錶尾 if body next null else r...