雙向迴圈鍊錶的實現詳解

2021-09-22 01:50:42 字數 1466 閱讀 5647

雙向迴圈鍊錶直接體現為雙向和迴圈,一般的單鏈表只有節點資料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 判斷鍊錶...