萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> java雙向循環鏈表實現程序

java雙向循環鏈表實現程序

   例1

 代碼如下  

package com.xlst.util;
 
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
 /**
  * 雙向循環鏈表
  * 完成時間:2012.9.28
  * 版本1.0
  * @author xlst
  *
  */
 public class BothwayLoopLinked {
     /**
      * 存放鏈表長度的 map
      * 
      * 如果簡單使用 static int 型的 size 基本類型變量,則只能維護一個雙向循環鏈表。
      * 同時存在兩個及以上雙向循環鏈表時,數據會錯亂
      */
     private static final Map<String, Integer> sizeMap = new HashMap<String, Integer>();
     /**
      * 雙向鏈表的 id
      * 一個雙向一個唯一的 id
      * 根據這個id可以從 sizeMap 中取出當前鏈表的長度
      */
     private String linkedId = null;
     
     /**
      * 節點中的數據
      */
     private Object data = null;
     
     /**
      * 前一個節點(初始化時是自身)
      */
     private BothwayLoopLinked prev = this;
     /**
      * 後一個節點(初始化時是自身)
      */
     private BothwayLoopLinked next = this;
     
     public BothwayLoopLinked(){}
     
     /**
      * 在節點之後插入新節點
      * @param newLinked 新插入的節點
      */
     public void insertAfter(BothwayLoopLinked newLinked){
         //    原來的前節點與後節點
         BothwayLoopLinked oldBefore = this;
         BothwayLoopLinked oldAfter = this.next;
         
         //    設置 newLinked 與原前節點的關系
         oldBefore.next = newLinked;
         newLinked.prev = oldBefore;
         
         //    設置 newLinked 與原後節點的關系
         oldAfter.prev = newLinked;
         newLinked.next = oldAfter;
         
         //    鏈表長度加一
         changeSize(+1);
         //    綁定新節點的 linkedId
         newLinked.linkedId = this.linkedId;
     }
     
     /**
      * 在節點之前插入新節點
      * @param newLinked 新插入的節點
      */
     public void insertBefore(BothwayLoopLinked newLinked){
         //    原來的前節點與後節點
         BothwayLoopLinked oldBefore = this.prev;
         BothwayLoopLinked oldAfter = this;
         
         //    設置 newLinked 與原前節點的關系
         oldBefore.next = newLinked;
         newLinked.prev = oldBefore;
         
         //    設置 newLinked 與原後節點的關系
         oldAfter.prev = newLinked;
         newLinked.next = oldAfter;
         
         //    鏈表長度加一
         changeSize(+1);
         //    綁定新節點的 linkedId
         newLinked.linkedId = this.linkedId;
     }
     
     /**
      * 從鏈表結構中刪除自身
      * @return 被刪除的節點
      */
     public BothwayLoopLinked remove(){
         return remove(this);
     }
     /**
      * 從鏈表結構中刪除指定節點
      * @param linked 要刪除的節點
      * @return 被刪除的節點
      */
     public BothwayLoopLinked remove(BothwayLoopLinked linked){
         linked.prev.next = linked.next;
         linked.next.prev =

copyright © 萬盛學電腦網 all rights reserved