之前整理過一篇關於單向鍊錶的資料:
單向鍊錶的缺點分析:
1.單向鍊錶,查詢的方向只能是乙個方向,而雙向鍊錶可以向前或者向後去查詢
2.單向鍊錶不能進行自我刪除,需要借助輔助節點(借助temp 就是待刪除節點的前乙個節點),而雙向鍊錶則可以進行自我刪除
3.示意圖:
關於雙向鍊錶的遍歷,新增,修改,刪除
1.遍歷:
*和單向鍊錶一致
//遍歷雙向鍊錶的方法
public void showlist()
//因為頭節點不能動,因此我們需要乙個輔助變數來遍歷
heronode2 tempnode = head;
while (true)
//輸出節點的資訊
system.out.println(tempnode.next);
tempnode = tempnode.next;}}
2.新增
*先找到單向鍊錶的倒數第二個節點(temp.next==null),然後進行新增
//新增乙個節點到雙向鍊錶的最後
public void add(heronode2 heronode)
//未找到 temp後移
temp = temp.next;
}//當退出while迴圈時,temp指向了鍊錶的最後
//關聯雙向鍊錶
temp.next = heronode;
heronode.pre = temp;
}
3.修改節點:
*和單向鍊錶一致
public void update(heronode2 newheronode)
//找到需要修改的節點資訊,根據no 編號
//定義乙個輔助變數
heronode2 temp = head.next;
boolean flag = false;
while (true)
if (temp.no == newheronode.no)
temp = temp.next;
}if (flag) else
}
4.刪除節點
*在單向鍊錶中,需要找到待刪除節點的前乙個節點,才可以通過temp.next=temp.next.next的方法進行刪除
*而在雙向鍊錶中,只需要找到待刪除節點即可,再通過自我刪除的方式
自我刪除**
**tempnode.pre.next = tempnode.next;
//有風險
// 如果要刪除最後乙個節點,就不需要執行下面這句話,否則會出現空指標異常
tempnote.next.pre
if(tempnode.next!=null)**
public void deletenode(int no)
heronode2 tempnode = head.next;//輔助節點
boolean flag = false;
while (true)
if (tempnode.no == no)
tempnode = tempnode.next;
}if (flag)
} else
}
雙向鍊錶操作的完整**:public class doublelinkedlistdemo
}class doublelinkedlist
public void sethead(heronode2 head)
//遍歷雙向鍊錶的方法
public void showlist()
//因為頭節點不能動,因此我們需要乙個輔助變數來遍歷
heronode2 tempnode = head;
while (true)
//輸出節點的資訊
system.out.println(tempnode.next);
tempnode = tempnode.next;}}
//新增乙個節點到雙向鍊錶的最後
public void add(heronode2 heronode)
//未找到 temp後移
temp = temp.next;
}//當退出while迴圈時,temp指向了鍊錶的最後
//關聯雙向鍊錶
temp.next = heronode;
heronode.pre = temp;
}//修改乙個節點的內容,雙向鍊錶修改節點和單向鍊錶**一致
public void update(heronode2 newheronode)
//找到需要修改的節點資訊,根據no 編號
//定義乙個輔助變數
heronode2 temp = head.next;
boolean flag = false;
while (true)
if (temp.no == newheronode.no)
temp = temp.next;
}if (flag) else
}//從雙向鍊錶中刪除乙個節點
/*** 對於雙向鍊錶,可以直接找到要刪除的這個節點
* 找到後,自我刪除即可
*/public void deletenode(int no)
heronode2 tempnode = head.next;//輔助節點
boolean flag = false;
while (true)
if (tempnode.no == no)
tempnode = tempnode.next;
}if (flag)
} else
}}class heronode2
@override
public string tostring() ';}}
資料結構之雙向鍊錶
簡述 指標域有乙個指標 而言,占用資源更大,但相應的 雙向鍊錶遍歷的時候只需要乙個指標就可以,而且 只有得到其中任何乙個節點就是得到整個鍊錶,單向鍊錶必須得到他的頭節點,才能遍歷整個鍊錶,而且得有兩個指標。實現 bothwaylinklist.h ifndef mymodule h define m...
資料結構之 雙向鍊錶
單鏈表的結點都只有乙個指向下乙個結點的指標。單鏈表的資料元素無法直接訪問其前驅元素。建立鍊錶 銷毀鍊錶 獲取鍊錶長度 清空鍊錶 獲取第pos個元素操作 插入元素到位置pos 刪除位置pos處的元素 dlinklist dlinklist creat 建立乙個鍊錶 void dlinklist des...
資料結構之雙向鍊錶
雙向鍊錶宛如一列火車,剛發明的時候只有乙個頭,如果它的行駛路線為 a b c d e f g h i j k a 這個時候有一批貨物需要從k運到j,那麼它的運輸路線一定是 k a b c d e f g h i j 所以後來火車就有了兩個頭,由此可見雙向鍊錶的重要性!雙向鍊錶 在單鏈表結點上增添了乙...