html5中文学习网

您的位置: 首页 > 网站及特效实例 > jquery特效 » 正文

java双向循环链表实现程序_编程语言综合

[ ] 已经帮助:人解决问题

   例1vxKHTML5中文学习网 - HTML5先行者学习网

 代码如下  

package com.xlst.util;vxKHTML5中文学习网 - HTML5先行者学习网
 vxKHTML5中文学习网 - HTML5先行者学习网
 import java.util.HashMap;vxKHTML5中文学习网 - HTML5先行者学习网
 import java.util.Map;vxKHTML5中文学习网 - HTML5先行者学习网
 import java.util.UUID;vxKHTML5中文学习网 - HTML5先行者学习网
 vxKHTML5中文学习网 - HTML5先行者学习网
 /**vxKHTML5中文学习网 - HTML5先行者学习网
  * 双向循环链表vxKHTML5中文学习网 - HTML5先行者学习网
  * 完成时间:2012.9.28vxKHTML5中文学习网 - HTML5先行者学习网
  * 版本1.0vxKHTML5中文学习网 - HTML5先行者学习网
  * @author xlstvxKHTML5中文学习网 - HTML5先行者学习网
  *vxKHTML5中文学习网 - HTML5先行者学习网
  */vxKHTML5中文学习网 - HTML5先行者学习网
 public class BothwayLoopLinked {vxKHTML5中文学习网 - HTML5先行者学习网
     /**vxKHTML5中文学习网 - HTML5先行者学习网
      * 存放链表长度的 mapvxKHTML5中文学习网 - HTML5先行者学习网
      * vxKHTML5中文学习网 - HTML5先行者学习网
      * 如果简单使用 static int 型的 size 基本类型变量,则只能维护一个双向循环链表。vxKHTML5中文学习网 - HTML5先行者学习网
      * 同时存在两个及以上双向循环链表时,数据会错乱vxKHTML5中文学习网 - HTML5先行者学习网
      */vxKHTML5中文学习网 - HTML5先行者学习网
     private static final Map<String, Integer> sizeMap = new HashMap<String, Integer>();vxKHTML5中文学习网 - HTML5先行者学习网
     /**vxKHTML5中文学习网 - HTML5先行者学习网
      * 双向链表的 idvxKHTML5中文学习网 - HTML5先行者学习网
      * 一个双向一个唯一的 idvxKHTML5中文学习网 - HTML5先行者学习网
      * 根据这个id可以从 sizeMap 中取出当前链表的长度vxKHTML5中文学习网 - HTML5先行者学习网
      */vxKHTML5中文学习网 - HTML5先行者学习网
     private String linkedId = null;vxKHTML5中文学习网 - HTML5先行者学习网
     vxKHTML5中文学习网 - HTML5先行者学习网
     /**vxKHTML5中文学习网 - HTML5先行者学习网
      * 节点中的数据vxKHTML5中文学习网 - HTML5先行者学习网
      */vxKHTML5中文学习网 - HTML5先行者学习网
     private Object data = null;vxKHTML5中文学习网 - HTML5先行者学习网
     vxKHTML5中文学习网 - HTML5先行者学习网
     /**vxKHTML5中文学习网 - HTML5先行者学习网
      * 前一个节点(初始化时是自身)vxKHTML5中文学习网 - HTML5先行者学习网
      */vxKHTML5中文学习网 - HTML5先行者学习网
     private BothwayLoopLinked prev = this;vxKHTML5中文学习网 - HTML5先行者学习网
     /**vxKHTML5中文学习网 - HTML5先行者学习网
      * 后一个节点(初始化时是自身)vxKHTML5中文学习网 - HTML5先行者学习网
      */vxKHTML5中文学习网 - HTML5先行者学习网
     private BothwayLoopLinked next = this;vxKHTML5中文学习网 - HTML5先行者学习网
     vxKHTML5中文学习网 - HTML5先行者学习网
     public BothwayLoopLinked(){}vxKHTML5中文学习网 - HTML5先行者学习网
     vxKHTML5中文学习网 - HTML5先行者学习网
     /**vxKHTML5中文学习网 - HTML5先行者学习网
      * 在节点之后插入新节点vxKHTML5中文学习网 - HTML5先行者学习网
      * @param newLinked 新插入的节点vxKHTML5中文学习网 - HTML5先行者学习网
      */vxKHTML5中文学习网 - HTML5先行者学习网
     public void insertAfter(BothwayLoopLinked newLinked){vxKHTML5中文学习网 - HTML5先行者学习网
         //    原来的前节点与后节点vxKHTML5中文学习网 - HTML5先行者学习网
         BothwayLoopLinked oldBefore = this;vxKHTML5中文学习网 - HTML5先行者学习网
         BothwayLoopLinked oldAfter = this.next;vxKHTML5中文学习网 - HTML5先行者学习网
         vxKHTML5中文学习网 - HTML5先行者学习网
         //    设置 newLinked 与原前节点的关系vxKHTML5中文学习网 - HTML5先行者学习网
         oldBefore.next = newLinked;vxKHTML5中文学习网 - HTML5先行者学习网
         newLinked.prev = oldBefore;vxKHTML5中文学习网 - HTML5先行者学习网
         vxKHTML5中文学习网 - HTML5先行者学习网
         //    设置 newLinked 与原后节点的关系vxKHTML5中文学习网 - HTML5先行者学习网
         oldAfter.prev = newLinked;vxKHTML5中文学习网 - HTML5先行者学习网
         newLinked.next = oldAfter;vxKHTML5中文学习网 - HTML5先行者学习网
         vxKHTML5中文学习网 - HTML5先行者学习网
         //    链表长度加一vxKHTML5中文学习网 - HTML5先行者学习网
         changeSize(+1);vxKHTML5中文学习网 - HTML5先行者学习网
         //    绑定新节点的 linkedIdvxKHTML5中文学习网 - HTML5先行者学习网
         newLinked.linkedId = this.linkedId;vxKHTML5中文学习网 - HTML5先行者学习网
     }vxKHTML5中文学习网 - HTML5先行者学习网
     vxKHTML5中文学习网 - HTML5先行者学习网
     /**vxKHTML5中文学习网 - HTML5先行者学习网
      * 在节点之前插入新节点vxKHTML5中文学习网 - HTML5先行者学习网
      * @param newLinked 新插入的节点vxKHTML5中文学习网 - HTML5先行者学习网
      */vxKHTML5中文学习网 - HTML5先行者学习网
     public void insertBefore(BothwayLoopLinked newLinked){vxKHTML5中文学习网 - HTML5先行者学习网
         //    原来的前节点与后节点vxKHTML5中文学习网 - HTML5先行者学习网
         BothwayLoopLinked oldBefore = this.prev;vxKHTML5中文学习网 - HTML5先行者学习网
         BothwayLoopLinked oldAfter = this;vxKHTML5中文学习网 - HTML5先行者学习网
         vxKHTML5中文学习网 - HTML5先行者学习网
         //    设置 newLinked 与原前节点的关系vxKHTML5中文学习网 - HTML5先行者学习网
         oldBefore.next = newLinked;vxKHTML5中文学习网 - HTML5先行者学习网
         newLinked.prev = oldBefore;vxKHTML5中文学习网 - HTML5先行者学习网
         vxKHTML5中文学习网 - HTML5先行者学习网
         //    设置 newLinked 与原后节点的关系vxKHTML5中文学习网 - HTML5先行者学习网
         oldAfter.prev = newLinked;vxKHTML5中文学习网 - HTML5先行者学习网
         newLinked.next = oldAfter;vxKHTML5中文学习网 - HTML5先行者学习网
         vxKHTML5中文学习网 - HTML5先行者学习网
         //    链表长度加一vxKHTML5中文学习网 - HTML5先行者学习网
         changeSize(+1);vxKHTML5中文学习网 - HTML5先行者学习网
         //    绑定新节点的 linkedIdvxKHTML5中文学习网 - HTML5先行者学习网
         newLinked.linkedId = this.linkedId;vxKHTML5中文学习网 - HTML5先行者学习网
     }vxKHTML5中文学习网 - HTML5先行者学习网
     vxKHTML5中文学习网 - HTML5先行者学习网
     /**vxKHTML5中文学习网 - HTML5先行者学习网
      * 从链表结构中删除自身vxKHTML5中文学习网 - HTML5先行者学习网
      * @return 被删除的节点vxKHTML5中文学习网 - HTML5先行者学习网
      */vxKHTML5中文学习网 - HTML5先行者学习网
     public BothwayLoopLinked remove(){vxKHTML5中文学习网 - HTML5先行者学习网
         return remove(this);vxKHTML5中文学习网 - HTML5先行者学习网
     }vxKHTML5中文学习网 - HTML5先行者学习网
     /**vxKHTML5中文学习网 - HTML5先行者学习网
      * 从链表结构中删除指定节点vxKHTML5中文学习网 - HTML5先行者学习网
      * @param linked 要删除的节点vxKHTML5中文学习网 - HTML5先行者学习网
      * @return 被删除的节点vxKHTML5中文学习网 - HTML5先行者学习网
      */vxKHTML5中文学习网 - HTML5先行者学习网
     public BothwayLoopLinked remove(BothwayLoopLinked linked){vxKHTML5中文学习网 - HTML5先行者学习网
         linked.prev.next = linked.next;vxKHTML5中文学习网 - HTML5先行者学习网
         linked.next.prev = linked.prev;vxKHTML5中文学习网 - HTML5先行者学习网
         vxKHTML5中文学习网 - HTML5先行者学习网
         linked.prev = linked;vxKHTML5中文学习网 - HTML5先行者学习网
         linked.next = linked;vxKHTML5中文学习网 - HTML5先行者学习网
         vxKHTML5中文学习网 - HTML5先行者学习网
         //    链表长度减一vxKHTML5中文学习网 - HTML5先行者学习网
         changeSize(-1);vxKHTML5中文学习网 - HTML5先行者学习网
         //    取消该节点的 linkedIdvxKHTML5中文学习网 - HTML5先行者学习网
         this.linkedId = null;vxKHTML5中文学习网 - HTML5先行者学习网
         vxKHTML5中文学习网 - HTML5先行者学习网
         //    返回被删除的节点vxKHTML5中文学习网 - HTML5先行者学习网
         return linked;vxKHTML5中文学习网 - HTML5先行者学习网
     }vxKHTML5中文学习网 - HTML5先行者学习网
     vxKHTML5中文学习网 - HTML5先行者学习网
     /**vxKHTML5中文学习网 - HTML5先行者学习网
      * 改变链表长度(默认长度加1),私有方法vxKHTML5中文学习网 - HTML5先行者学习网
      */vxKHTML5中文学习网 - HTML5先行者学习网
     private void changeSize(){vxKHTML5中文学习网 - HTML5先行者学习网
         changeSize(1);vxKHTML5中文学习网 - HTML5先行者学习网
     }vxKHTML5中文学习网 - HTML5先行者学习网
     /**vxKHTML5中文学习网 - HTML5先行者学习网
      * 改变链表长度(根据参数),私有方法vxKHTML5中文学习网 - HTML5先行者学习网
      * @param value 改变的长度值(可以为负数)vxKHTML5中文学习网 - HTML5先行者学习网
      */vxKHTML5中文学习网 - HTML5先行者学习网
     private void changeSize(int value){vxKHTML5中文学习网 - HTML5先行者学习网
         if(this.linkedId == null){vxKHTML5中文学习网 - HTML5先行者学习网
             this.linkedId = UUID.randomUUID().toString();vxKHTML5中文学习网 - HTML5先行者学习网
             vxKHTML5中文学习网 - HTML5先行者学习网
             sizeMap.put(linkedId, 1 + value);    //    sizeMap.put(linkedId, 2);vxKHTML5中文学习网 - HTML5先行者学习网
         }else{vxKHTML5中文学习网 - HTML5先行者学习网
             Integer size = sizeMap.get(this.linkedId);vxKHTML5中文学习网 - HTML5先行者学习网
             //    Integer 是引用类型,更新值之后不必再 put 回 sizeMap 里vxKHTML5中文学习网 - HTML5先行者学习网
             size += value;vxKHTML5中文学习网 - HTML5先行者学习网
         }vxKHTML5中文学习网 - HTML5先行者学习网
     }vxKHTML5中文学习网 - HTML5先行者学习网
 vxKHTML5中文学习网 - HTML5先行者学习网
     public Object getData() {vxKHTML5中文学习网 - HTML5先行者学习网
         return data;vxKHTML5中文学习网 - HTML5先行者学习网
     }vxKHTML5中文学习网 - HTML5先行者学习网
 vxKHTML5中文学习网 - HTML5先行者学习网
     public void setData(Object data) {vxKHTML5中文学习网 - HTML5先行者学习网
         this.data = data;vxKHTML5中文学习网 - HTML5先行者学习网
     }vxKHTML5中文学习网 - HTML5先行者学习网
 vxKHTML5中文学习网 - HTML5先行者学习网
     /**vxKHTML5中文学习网 - HTML5先行者学习网
      * 获取链表的长度vxKHTML5中文学习网 - HTML5先行者学习网
      * 如果是新生的节点 或 从链表中删除的节点,则作为独立链表,长度是 1vxKHTML5中文学习网 - HTML5先行者学习网
      * @return 链表的长度vxKHTML5中文学习网 - HTML5先行者学习网
      */vxKHTML5中文学习网 - HTML5先行者学习网
     public int getSize() {vxKHTML5中文学习网 - HTML5先行者学习网
         return (linkedId == null) ? 1 : sizeMap.get(this.linkedId);vxKHTML5中文学习网 - HTML5先行者学习网
     }vxKHTML5中文学习网 - HTML5先行者学习网
 vxKHTML5中文学习网 - HTML5先行者学习网
     public BothwayLoopLinked getPrev() {vxKHTML5中文学习网 - HTML5先行者学习网
         return prev;vxKHTML5中文学习网 - HTML5先行者学习网
     }vxKHTML5中文学习网 - HTML5先行者学习网
 vxKHTML5中文学习网 - HTML5先行者学习网
     public BothwayLoopLinked getNext() {vxKHTML5中文学习网 - HTML5先行者学习网
         return next;vxKHTML5中文学习网 - HTML5先行者学习网
     }vxKHTML5中文学习网 - HTML5先行者学习网
 }vxKHTML5中文学习网 - HTML5先行者学习网

  例2vxKHTML5中文学习网 - HTML5先行者学习网

 代码如下  

/**vxKHTML5中文学习网 - HTML5先行者学习网
 * 双向循环链表测试vxKHTML5中文学习网 - HTML5先行者学习网
 * @author GKTvxKHTML5中文学习网 - HTML5先行者学习网
 * @param <E>vxKHTML5中文学习网 - HTML5先行者学习网
 */vxKHTML5中文学习网 - HTML5先行者学习网
public class Node<E> vxKHTML5中文学习网 - HTML5先行者学习网
{vxKHTML5中文学习网 - HTML5先行者学习网
    private E element;            //结点数据vxKHTML5中文学习网 - HTML5先行者学习网
    private Node<E> next;        //上结点vxKHTML5中文学习网 - HTML5先行者学习网
    private Node<E> previous;    //下结点vxKHTML5中文学习网 - HTML5先行者学习网
    private static int size=0;    //链表长vxKHTML5中文学习网 - HTML5先行者学习网

    //默认关结点next previous都是空,vxKHTML5中文学习网 - HTML5先行者学习网
    public Node()vxKHTML5中文学习网 - HTML5先行者学习网
    {vxKHTML5中文学习网 - HTML5先行者学习网
        this.element=null;vxKHTML5中文学习网 - HTML5先行者学习网
        this.next=null;vxKHTML5中文学习网 - HTML5先行者学习网
        this.previous=null;vxKHTML5中文学习网 - HTML5先行者学习网
    }vxKHTML5中文学习网 - HTML5先行者学习网
    vxKHTML5中文学习网 - HTML5先行者学习网
    private Node(E element,Node<E> next,Node<E> previous)vxKHTML5中文学习网 - HTML5先行者学习网
    {vxKHTML5中文学习网 - HTML5先行者学习网
        this.element=element;vxKHTML5中文学习网 - HTML5先行者学习网
        this.next=next;vxKHTML5中文学习网 - HTML5先行者学习网
        this.previous=previous;vxKHTML5中文学习网 - HTML5先行者学习网
    }vxKHTML5中文学习网 - HTML5先行者学习网

    /**vxKHTML5中文学习网 - HTML5先行者学习网
     * 尾部添加元素 evxKHTML5中文学习网 - HTML5先行者学习网
     * @param evxKHTML5中文学习网 - HTML5先行者学习网
     */vxKHTML5中文学习网 - HTML5先行者学习网
    public void addAfter(E e)vxKHTML5中文学习网 - HTML5先行者学习网
    {vxKHTML5中文学习网 - HTML5先行者学习网
        //定义新结点,next-->头结点;previous-->头结点.previous(尾结点)vxKHTML5中文学习网 - HTML5先行者学习网
        Node<E> newNode=new Node<E>(e,this,this.previous==null?this:this.previous);vxKHTML5中文学习网 - HTML5先行者学习网
        //头结点next为空则让它指向newNodevxKHTML5中文学习网 - HTML5先行者学习网
        if(this.next==null)vxKHTML5中文学习网 - HTML5先行者学习网
        {vxKHTML5中文学习网 - HTML5先行者学习网
            this.next=newNode;vxKHTML5中文学习网 - HTML5先行者学习网
        }vxKHTML5中文学习网 - HTML5先行者学习网
        //头结点previous为空则让它指向newNodevxKHTML5中文学习网 - HTML5先行者学习网
        if(this.previous==null)vxKHTML5中文学习网 - HTML5先行者学习网
        {vxKHTML5中文学习网 - HTML5先行者学习网
            this.previous=newNode;vxKHTML5中文学习网 - HTML5先行者学习网
        }vxKHTML5中文学习网 - HTML5先行者学习网
        this.previous.next=newNode;vxKHTML5中文学习网 - HTML5先行者学习网
        this.previous=newNode;vxKHTML5中文学习网 - HTML5先行者学习网
        size++;vxKHTML5中文学习网 - HTML5先行者学习网
    }vxKHTML5中文学习网 - HTML5先行者学习网
    /**vxKHTML5中文学习网 - HTML5先行者学习网
     * 头部添加元素 evxKHTML5中文学习网 - HTML5先行者学习网
     * @param evxKHTML5中文学习网 - HTML5先行者学习网
     */vxKHTML5中文学习网 - HTML5先行者学习网
    public void addBefor(E e)vxKHTML5中文学习网 - HTML5先行者学习网
    {vxKHTML5中文学习网 - HTML5先行者学习网
        Node<E> newNode=new Node<E>(e,this.next==null?this:this.next,this);vxKHTML5中文学习网 - HTML5先行者学习网
        if(this.next==null)vxKHTML5中文学习网 - HTML5先行者学习网
        {vxKHTML5中文学习网 - HTML5先行者学习网
            this.next=newNode;vxKHTML5中文学习网 - HTML5先行者学习网
        }vxKHTML5中文学习网 - HTML5先行者学习网
        if(this.previous==null)vxKHTML5中文学习网 - HTML5先行者学习网
        {vxKHTML5中文学习网 - HTML5先行者学习网
            this.previous=newNode;vxKHTML5中文学习网 - HTML5先行者学习网
        }vxKHTML5中文学习网 - HTML5先行者学习网
        this.next.previous=newNode;vxKHTML5中文学习网 - HTML5先行者学习网
        this.next=newNode;vxKHTML5中文学习网 - HTML5先行者学习网
        size++;vxKHTML5中文学习网 - HTML5先行者学习网
    }vxKHTML5中文学习网 - HTML5先行者学习网
    /**vxKHTML5中文学习网 - HTML5先行者学习网
     * 在index处添加元素evxKHTML5中文学习网 - HTML5先行者学习网
     * @param evxKHTML5中文学习网 - HTML5先行者学习网
     * @param indexvxKHTML5中文学习网 - HTML5先行者学习网
     */vxKHTML5中文学习网 - HTML5先行者学习网
    public void add(E e,int index)vxKHTML5中文学习网 - HTML5先行者学习网
    {vxKHTML5中文学习网 - HTML5先行者学习网
        //索引越界vxKHTML5中文学习网 - HTML5先行者学习网
        if(index>=size || index<0)vxKHTML5中文学习网 - HTML5先行者学习网
        {vxKHTML5中文学习网 - HTML5先行者学习网
            throw new IndexOutOfBoundsException("Node.get():"+index);vxKHTML5中文学习网 - HTML5先行者学习网
        }vxKHTML5中文学习网 - HTML5先行者学习网
        elsevxKHTML5中文学习网 - HTML5先行者学习网
        {vxKHTML5中文学习网 - HTML5先行者学习网
            //index>size/2,反向遍历vxKHTML5中文学习网 - HTML5先行者学习网
            if(index>size>>1)vxKHTML5中文学习网 - HTML5先行者学习网
            {vxKHTML5中文学习网 - HTML5先行者学习网
                Node<E> temp=this;vxKHTML5中文学习网 - HTML5先行者学习网
                for(int i=size;i>index;i--)vxKHTML5中文学习网 - HTML5先行者学习网
                {vxKHTML5中文学习网 - HTML5先行者学习网
                    temp=temp.previous;vxKHTML5中文学习网 - HTML5先行者学习网
                }vxKHTML5中文学习网 - HTML5先行者学习网
                Node<E> newNode=new Node<E>(e,temp,temp.previous);vxKHTML5中文学习网 - HTML5先行者学习网
                temp.previous.next=newNode;vxKHTML5中文学习网 - HTML5先行者学习网
                temp.previous=newNode;vxKHTML5中文学习网 - HTML5先行者学习网
            }vxKHTML5中文学习网 - HTML5先行者学习网
            elsevxKHTML5中文学习网 - HTML5先行者学习网
            {vxKHTML5中文学习网 - HTML5先行者学习网
                Node<E> temp=this;vxKHTML5中文学习网 - HTML5先行者学习网
                for(int i=0;i<=index;i++)vxKHTML5中文学习网 - HTML5先行者学习网
                {vxKHTML5中文学习网 - HTML5先行者学习网
                    temp=temp.next;vxKHTML5中文学习网 - HTML5先行者学习网
                }vxKHTML5中文学习网 - HTML5先行者学习网
                Node<E> newNode=new Node<E>(e,temp,temp.previous);vxKHTML5中文学习网 - HTML5先行者学习网
                temp.previous.next=newNode;vxKHTML5中文学习网 - HTML5先行者学习网
                temp.previous=newNode;vxKHTML5中文学习网 - HTML5先行者学习网
            }vxKHTML5中文学习网 - HTML5先行者学习网
            size++;vxKHTML5中文学习网 - HTML5先行者学习网
        }vxKHTML5中文学习网 - HTML5先行者学习网
    }vxKHTML5中文学习网 - HTML5先行者学习网
    /**vxKHTML5中文学习网 - HTML5先行者学习网
     * 删除第index个元素vxKHTML5中文学习网 - HTML5先行者学习网
     * @param indexvxKHTML5中文学习网 - HTML5先行者学习网
     */vxKHTML5中文学习网 - HTML5先行者学习网
    public void remove(int index)vxKHTML5中文学习网 - HTML5先行者学习网
    {vxKHTML5中文学习网 - HTML5先行者学习网
        //索引越界vxKHTML5中文学习网 - HTML5先行者学习网
        if(index>=size || index<0)vxKHTML5中文学习网 - HTML5先行者学习网
        {vxKHTML5中文学习网 - HTML5先行者学习网
            throw new IndexOutOfBoundsException("Node.get():"+index);vxKHTML5中文学习网 - HTML5先行者学习网
        }vxKHTML5中文学习网 - HTML5先行者学习网
        elsevxKHTML5中文学习网 - HTML5先行者学习网
        {vxKHTML5中文学习网 - HTML5先行者学习网
            //index>size/2,反向遍历vxKHTML5中文学习网 - HTML5先行者学习网
            if(index>size>>1)vxKHTML5中文学习网 - HTML5先行者学习网
            {vxKHTML5中文学习网 - HTML5先行者学习网
                Node<E> temp=this;vxKHTML5中文学习网 - HTML5先行者学习网
                for(int i=size;i>index;i--)vxKHTML5中文学习网 - HTML5先行者学习网
                {vxKHTML5中文学习网 - HTML5先行者学习网
                    temp=temp.previous;vxKHTML5中文学习网 - HTML5先行者学习网
                }vxKHTML5中文学习网 - HTML5先行者学习网
                temp.previous.next=temp.next;vxKHTML5中文学习网 - HTML5先行者学习网
                temp.next.previous=temp.previous;vxKHTML5中文学习网 - HTML5先行者学习网
            }vxKHTML5中文学习网 - HTML5先行者学习网
            elsevxKHTML5中文学习网 - HTML5先行者学习网
            {vxKHTML5中文学习网 - HTML5先行者学习网
                Node<E> temp=this;vxKHTML5中文学习网 - HTML5先行者学习网
                for(int i=0;i<=index;i++)vxKHTML5中文学习网 - HTML5先行者学习网
                {vxKHTML5中文学习网 - HTML5先行者学习网
                    temp=temp.next;vxKHTML5中文学习网 - HTML5先行者学习网
                }vxKHTML5中文学习网 - HTML5先行者学习网
                temp.previous.next=temp.next;vxKHTML5中文学习网 - HTML5先行者学习网
                temp.next.previous=temp.previous;vxKHTML5中文学习网 - HTML5先行者学习网
            }vxKHTML5中文学习网 - HTML5先行者学习网
            size--;vxKHTML5中文学习网 - HTML5先行者学习网
        }vxKHTML5中文学习网 - HTML5先行者学习网
    }vxKHTML5中文学习网 - HTML5先行者学习网

    /**vxKHTML5中文学习网 - HTML5先行者学习网
     * 取得第index个元素vxKHTML5中文学习网 - HTML5先行者学习网
     * @param indexvxKHTML5中文学习网 - HTML5先行者学习网
     * @returnvxKHTML5中文学习网 - HTML5先行者学习网
     */vxKHTML5中文学习网 - HTML5先行者学习网
    public E get(int index)vxKHTML5中文学习网 - HTML5先行者学习网
    {vxKHTML5中文学习网 - HTML5先行者学习网
        //索引越界vxKHTML5中文学习网 - HTML5先行者学习网
        if(index>=size || index<0)vxKHTML5中文学习网 - HTML5先行者学习网
        {vxKHTML5中文学习网 - HTML5先行者学习网
            throw new IndexOutOfBoundsException("Node.get():"+index);vxKHTML5中文学习网 - HTML5先行者学习网
        }vxKHTML5中文学习网 - HTML5先行者学习网
        elsevxKHTML5中文学习网 - HTML5先行者学习网
        {vxKHTML5中文学习网 - HTML5先行者学习网
            //index>size/2,反向遍历vxKHTML5中文学习网 - HTML5先行者学习网
            if(index>size>>1)vxKHTML5中文学习网 - HTML5先行者学习网
            {vxKHTML5中文学习网 - HTML5先行者学习网
                Node<E> temp=this;vxKHTML5中文学习网 - HTML5先行者学习网
                for(int i=size;i>index;i--)vxKHTML5中文学习网 - HTML5先行者学习网
                {vxKHTML5中文学习网 - HTML5先行者学习网
                    temp=temp.previous;vxKHTML5中文学习网 - HTML5先行者学习网
                }vxKHTML5中文学习网 - HTML5先行者学习网
                return temp.element;vxKHTML5中文学习网 - HTML5先行者学习网
            }vxKHTML5中文学习网 - HTML5先行者学习网
            elsevxKHTML5中文学习网 - HTML5先行者学习网
            {vxKHTML5中文学习网 - HTML5先行者学习网
                Node<E> temp=this;vxKHTML5中文学习网 - HTML5先行者学习网
                for(int i=0;i<=index;i++)vxKHTML5中文学习网 - HTML5先行者学习网
                {vxKHTML5中文学习网 - HTML5先行者学习网
                    temp=temp.next;vxKHTML5中文学习网 - HTML5先行者学习网
                }vxKHTML5中文学习网 - HTML5先行者学习网
                return temp.element;vxKHTML5中文学习网 - HTML5先行者学习网
            }vxKHTML5中文学习网 - HTML5先行者学习网
        }vxKHTML5中文学习网 - HTML5先行者学习网
    }vxKHTML5中文学习网 - HTML5先行者学习网
    public int size()vxKHTML5中文学习网 - HTML5先行者学习网
    {vxKHTML5中文学习网 - HTML5先行者学习网
        return size;vxKHTML5中文学习网 - HTML5先行者学习网
    }vxKHTML5中文学习网 - HTML5先行者学习网
    vxKHTML5中文学习网 - HTML5先行者学习网
    public static void main(String a[])vxKHTML5中文学习网 - HTML5先行者学习网
    {vxKHTML5中文学习网 - HTML5先行者学习网
        Node node=new Node();vxKHTML5中文学习网 - HTML5先行者学习网
        node.addAfter("1");vxKHTML5中文学习网 - HTML5先行者学习网
        node.addAfter("2");vxKHTML5中文学习网 - HTML5先行者学习网
        node.addAfter("3");vxKHTML5中文学习网 - HTML5先行者学习网
        node.addBefor("0");vxKHTML5中文学习网 - HTML5先行者学习网
        node.add("7", 0);vxKHTML5中文学习网 - HTML5先行者学习网
        System.out.println(node.get(0) );vxKHTML5中文学习网 - HTML5先行者学习网
        System.out.println(node.get(1) );vxKHTML5中文学习网 - HTML5先行者学习网
        System.out.println(node.get(2) );vxKHTML5中文学习网 - HTML5先行者学习网
        System.out.println(node.get(3) );vxKHTML5中文学习网 - HTML5先行者学习网
        System.out.println(node.get(4) );vxKHTML5中文学习网 - HTML5先行者学习网
        vxKHTML5中文学习网 - HTML5先行者学习网
    }vxKHTML5中文学习网 - HTML5先行者学习网
}vxKHTML5中文学习网 - HTML5先行者学习网

  这两个链表最大的不同就是头结点是否是哑元,以及取出元素(get函数)的时候for循环变量i的不同:vxKHTML5中文学习网 - HTML5先行者学习网

  双向循环链表(和java.util包的设计一样):由于head是哑元,因此取元素从head的下一个结点取vxKHTML5中文学习网 - HTML5先行者学习网

  单向链表:head不是哑元,第一次必须取head头结点的元素,因此循环上和双向循环链表不同。也就是第一次get并没有进入for循环,直接返回了头结点,从第二次才开始进入for循环,这里要特别注意vxKHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助