雙向迴圈鍊錶直接體現為雙向和迴圈,一般的單鏈表只有節點資料data和next指向位址(應該也是引用的意思),而在此需要增加前面部分的pre指向位址,同時還需要迴圈
迴圈則在定義節點時可以解決,如下所示
雙向可以假想三個節點,實際上就是3個節點之間完成pre和next的指向替換,如下圖所示
//原來的下乙個節點2的表示
doubleloopnode nextnode =next;
//把新節點作為節點1的下乙個節點
this.next = node;
//把節點1當作新節點的pre
node.pre = this;
//將節點2作為新節點的下乙個指向
node.next = nextnode;
//將新節點作為節點2 的上乙個指向
nextnode.pre = node;
這樣以來就完成了雙向迴圈鍊錶。具體**如下
public class doubleloopnode
//增加節點
// | pre|data|next| 原來節點1(this)
// | pre|data|next| node新節點
// | pre|data|next| 原來節點2
public void after(doubleloopnode node)
public doubleloopnode next()
public doubleloopnode pre()
public int getdata()
}
測試**及結果
doubleloopnode n1 = new doubleloopnode(1);
doubleloopnode n2 = new doubleloopnode(2);
doubleloopnode n3 = new doubleloopnode(3);
doubleloopnode n4 = new doubleloopnode(4);
n1.after(n2);
n2.after(n3);
system.out.println(n1.next.getdata());
system.out.println(n1.pre.getdata());
最後顯示的結果為2,3
n1、n2、n3三個節點迴圈相接,n1的前乙個節點為n3(3),n1的下乙個節點為n2(2)
雙向迴圈鍊錶的實現
其實雙向迴圈鍊錶與單鏈表的區別在於每個節點的結構發生了改變,具體的說是,每個節點多了乙個指標域,用於指向上乙個節點。其他的如鍊錶物件就不需要進行改變了。新的節點類 class lnode def init self,elem 0,prev none,next none self.prev prev ...
雙向迴圈鍊錶的實現
雙向迴圈鍊錶的實現 收藏我要投稿 在使用鍊錶來解決約瑟夫問題的時候,用到了迴圈鍊錶。迴圈鍊錶又分為單向迴圈鍊錶與雙向迴圈鍊錶,約瑟夫問題採用單項迴圈鍊錶可以得到很好的而解決了,但是單向鍊錶的很大的缺陷仍然存在,那就是在刪除的時候需要兩個併排指標同步移動。雙向鍊錶就可以解決這個問題,因為在雙向鍊錶中的...
雙向迴圈鍊錶 java實現
雙向迴圈煉表示意圖 雙向迴圈鍊錶實現 public class doublelink private int size 鍊錶長度 public nodehead 頭節點 constructor public doublelink 獲取鍊錶的長度 return public int size 判斷鍊錶...