java实现双向循环链表

模拟JDK中LinkedList的实现原理进行实现

package 链表;
//java实现循环链表
public class NewLinkedList<E>{
    private int size;
    private Entry<E> header=new Entry(null,null,null);
    //定义节点类型
    private class Entry<E> {
          E e;
          Entry<E> after;
          Entry<E> before;
          Entry(E e,Entry before,Entry after){
            this.e=e;
            this.after=after;
            this.before=before;
        }
    }
    //构造方法:
    public NewLinkedList(){
        //刚开始:头的前面是头,头的后面也是头
        header.after=header;
        header.before=header;
    }
    //增加元素
    public void add(E e){
        //每个节点之前的节点永远是头结点之前(也就是尾节点)的节点,
        //后面是头结点(采用尾差法)
        //每次增加一个节点,节点的后面是头,头的前面是节点,
        //节点的前面是头的前面(另外一个节点),另外一个节点的
        //后面就是我们新加入的节点
        //这样就保证了,我们每次插入的节点都是在末尾,
        Entry<E> node=new Entry<E>(e,header.before,header);
        node.before.after=node;
        node.after.before=node;
        size++;
    }
    //统计链表中元素的个数:
    public int length(){
        return size;
    }


    //根据索引获取元素
    public E getValue(int index){

        Entry<E> node=header.after;
        for(int i=0;i<index;i++){
            node=node.after;
        }
        return node.e;

    }

    public static void main(String[] args) {
        NewLinkedList<String> list=new NewLinkedList<String>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");
        System.out.println(list.getValue(10));

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值