双向链表

public classNode<E>

{

    private E element;            //结点数据

    private Node<E> next;        //上结点

    private Node<E> previous;    //下结点

    private static int size=0;    //链表长

 

    //默认关结点next previous都是空,

    publicNode()

    {

        this.element=null;

        this.next=null;

        this.previous=null;

    }

   

    privateNode(E element,Node<E> next,Node<E> previous)

    {

        this.element=element;

        this.next=next;

        this.previous=previous;

    }

 

    /**

     * 尾部添加元素 e

     * @parame

     */

    public voidaddAfter(E e)

    {

        //定义新结点,next-->头结点;previous-->头结点.previous(尾结点)

        Node<E>newNode=new Node<E>(e,this,this.previous==null?this:this.previous);

        //头结点next为空则让它指向newNode

        if(this.next==null)

        {

            this.next=newNode;

        }

        //头结点previous为空则让它指向newNode

        if(this.previous==null)

        {

            this.previous=newNode;

        }

        this.previous.next=newNode;

        this.previous=newNode;

        size++;

    }

    /**

     * 头部添加元素 e

     * @parame

     */

    public voidaddBefor(E e)

    {

        Node<E>newNode=new Node<E>(e,this.next==null?this:this.next,this);

        if(this.next==null)

        {

            this.next=newNode;

        }

        if(this.previous==null)

        {

            this.previous=newNode;

        }

        this.next.previous=newNode;

        this.next=newNode;

        size++;

    }

    /**

     * index处添加元素e

     * @parame

     * @paramindex

     */

    public voidadd(E e,int index)

    {

        //索引越界

        if(index>=size|| index<0)

        {

            throw newIndexOutOfBoundsException("Node.get():"+index);

        }

        else

        {

            //index>size/2,反向遍历

            if(index>size>>1)

            {

               Node<E> temp=this;

                for(int i=size;i>index;i--)

                {

                   temp=temp.previous;

                }

               Node<E> newNode=new Node<E>(e,temp,temp.previous);

                temp.previous.next=newNode;

                temp.previous=newNode;

            }

            else

            {

               Node<E> temp=this;

                for(inti=0;i<=index;i++)

                {

                   temp=temp.next;

                }

               Node<E> newNode=new Node<E>(e,temp,temp.previous);

                temp.previous.next=newNode;

                temp.previous=newNode;

            }

            size++;

        }

    }

    /**

     * 删除第index个元素

     * @paramindex

     */

    public voidremove(int index)

    {

        //索引越界

        if(index>=size|| index<0)

        {

            throw newIndexOutOfBoundsException("Node.get():"+index);

        }

        else

        {

            //index>size/2,反向遍历

            if(index>size>>1)

            {

               Node<E> temp=this;

                for(int i=size;i>index;i--)

                {

                   temp=temp.previous;

                }

                temp.previous.next=temp.next;

                temp.next.previous=temp.previous;

            }

            else

            {

               Node<E> temp=this;

                for(inti=0;i<=index;i++)

                {

                   temp=temp.next;

                }

                temp.previous.next=temp.next;

                temp.next.previous=temp.previous;

            }

            size--;

        }

    }

 

    /**

     * 取得第index个元素

     * @paramindex

     * @return

     */

    publicE get(int index)

    {

        //索引越界

        if(index>=size|| index<0)

        {

            throw newIndexOutOfBoundsException("Node.get():"+index);

        }

        else

        {

            //index>size/2,反向遍历

            if(index>size>>1)

            {

               Node<E> temp=this;

                for(int i=size;i>index;i--)

                {

                   temp=temp.previous;

                }

                returntemp.element;

            }

            else

            {

               Node<E> temp=this;

                for(inti=0;i<=index;i++)

                {

                   temp=temp.next;

                }

                returntemp.element;

            }

        }

    }

    public intsize()

    {

        return size;

    }

   

    public static voidmain(String a[])

    {

        Node node=new Node();

        node.addAfter("1");

        node.addAfter("2");

        node.addAfter("3");

        node.addBefor("0");

        node.add("7", 0);

        System.out.println(node.get(0));

        System.out.println(node.get(1));

        System.out.println(node.get(2));

        System.out.println(node.get(3));

        System.out.println(node.get(4));

       

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值