您的位置:首页 > 理论基础 > 数据结构算法

数据结构-双链表

2015-11-10 18:05 465 查看
http://www.cnblogs.com/skywang12345/p/3561803.html

public class DoubleLink<T>{

    private DNode<T> mHead;

    private int mCount;

    

     class DNode<T>{

        private DNode prev;

        private DNode next;

        private T value;

        

        public DNode(T value,DNode prev,DNode next){

            this.value = value;

            this.prev = prev;

            this.next = next;

        }

    }

    

    public DoubleLink(){

        mHead = new DNode<T>(null, null, null);

        mHead.prev = mHead.next = mHead;

        mCount = 0;

    }

    

    public int size(){

        return mCount;

    }

    

    public boolean isEmpty(){

        

        return mCount == 0;

    }

    

    

    private DNode<T> getNode(int index){

        if(index < 0 || index >= mCount){

            throw new ArrayIndexOutOfBoundsException();

        }

        if(index <= mCount/2){

            DNode<T> node = mHead.next;

            for(int i = 0;i < index; i++){

                node = node.next;

            }

            System.out.println("t1:" +node.prev.value + " " + node.value+"  " + node.next.value);

            return node;

        }

        

        DNode<T> prveNode = mHead.prev;

        int  pIndex = mCount -index -1;

        for(int i= 0;i < pIndex;i++){

            prveNode = prveNode.prev;

        }

        System.out.println("t2:" +prveNode.prev.value + " " + prveNode.value+"  " + prveNode.next.value);

        return prveNode;

    }

    

    

    public DNode<T> get(int index){

        return getNode(index);

    }

    

    public T getFirst(){

        return getNode(0).value;

        

    }

    

    public T getLast(){

        if(isEmpty()){

            throw new ArrayIndexOutOfBoundsException();

        }

        return getNode(mCount-1).value;

    }

    

    /**

     * 在之前插入

     * @param index

     * @param value

     */

    public void insert(int index,T value){

        if(index == 0){

            DNode<T> dnt = new DNode<T>(value, mHead, mHead.next);

            mHead.next.prev = dnt;

            mHead.next = dnt;

            mCount++;

            return;

        }

        DNode<T> dnt= getNode(index);

        

        DNode<T> pDnt = new DNode<T>(value,dnt.prev,dnt);

        

        dnt.prev.next =pDnt;

        

        dnt.prev =pDnt;

        mCount++;

        return;

    }

    

    public void insertFirst(T value){

        insert(0, value);    }

    

    public void append(T value){

        if(isEmpty()){

            insertFirst(value);

        }else{

            DNode<T> lastNode = getNode(mCount -1);

            DNode<T> node = new DNode<T>(value,lastNode,lastNode.next);

            lastNode.next.prev = node;

            lastNode.next = node;

            mCount++;

            //lastNode.next.prev = node;

        }

        

    }

    

    public void del(int index){

        DNode<T> node = getNode(index);

        node.prev.next = node.next;

        node.next.prev = node.prev;

        node = null;

        mCount --;

        return;

    }

    

    public void delFirst(){

        del(0);

    }

    public void delLast(){

        del(mCount -1);

    }

    

    public static void main(String[] args) {

        DoubleLink<Integer> dlink = new DoubleLink<Integer>();

        

        dlink.insertFirst(30);

        dlink.insert(0,20);

        dlink.insert(0,10);

        dlink.insert(1, 15);

        

        dlink.insert(3, 25);

        dlink.append(40);

        dlink.append(50);

        

        dlink.del(1);

        

        for (int i=0; i<dlink.size(); i++){

            System.out.println("dlink("+i+")="+ dlink.get(i).value);

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构