LinkedList学习

LinkedList源码学习
核心:递归、链表结构

public class LinkedListTemplate<E> {
    public int size;//大小
    public Node linknode;//节点

    public static void main(String[] args) {
    /*    LinkedListTemplate<String> demo = new LinkedListTemplate<>();
        demo.add(0,"22");## 标题
        demo.addLast("33");
        System.out.println(demo.toString());
        demo.addFirst("11");
        System.out.println(demo.toString());
        demo.add(3,"44");
        demo.add(2,"55");
        System.out.println(demo.toString());
        demo.update(2,"55");
        System.out.println(demo.toString());
        demo.delete("55");
        System.out.println(demo.toString());
        demo.delete(4);
        System.out.println(demo.toString());
        demo.delete("55");
        System.out.println(demo.toString());*/
    
        Thread thread1 = new Thread(()->{
            LinkedListTemplate<String> list1 = new LinkedListTemplate<>();
            LinkedListTemplate<String> list2 = new LinkedListTemplate<>();
            int i = 0;
            while(i<10){
                list1.addFirst("aaaaa0"+i);
                list2.addFirst("bbbbb0"+i);
                i++;
            }
            System.out.println(list1.toString());
            System.out.println(list2.toString());
        });

        Thread thread2 = new Thread(()->{
            LinkedListTemplate<String> list3 = new LinkedListTemplate<>();
            LinkedListTemplate<String> list4 = new LinkedListTemplate<>();
            int i = 0;
            while(i<10){
                list3.addFirst("aaaaa0"+i);
                list4.addFirst("aaaaa0"+i);
                i++;
            }
            System.out.println(list3.toString());
            System.out.println(list4.toString());
        });

        thread1.start();
        thread2.start();
    }

    //初始化
    public LinkedListTemplate(){
        this.size = 0;
        this.linknode = new Node();
    }

    //主要方法:新增
    public /*synchronized*/ void add(int index,E e){
        if(index < 0 || index > size){
            throw new IllegalArgumentException("add Error");
        }
        Node prev = linknode;
        for(int i = 0;i <index; i++){
            prev = prev.next;
        }
        prev.next = new Node(e,prev.next);//获取当前节点下的下一个节点,并给下一个节点赋值
        size++;
    }

    //头部添加
    public /*synchronized */void addFirst(E e){
        add(0,e);
    }

    //尾部添加
    public void addLast(E e){
        add(size,e);
    }

    //修改元素
    public void update(int index,E e){
        if(index <0 || index > size)
            throw new IllegalArgumentException("update error");
        Node pre = linknode;
        for(int i = 0;i < index ;i++)
        {
            pre = pre.next;
        }
        pre.e = e;//修改当前节点中的元素
    }

    //删除节点1:按照元素删除
    public void delete(E e){
        Node cur = linknode;
        while(cur != null){
           if(cur.next.e.equals(e)){
                break;
           }
            cur = cur.next;
        }
        Node delNode = cur.next;
        cur.next = delNode.next;
        delNode.next = null;
        size --;
    }

    //删除节点2:按照下标删除
    public void delete(int index){
        if(index < 0 || index > size)
            throw new IllegalArgumentException(" delete error");
        Node del = linknode;
        while(index < size){
            del = linknode.next;
        }
        Node delNode = del.next;
        del.next = delNode.next;//保存当前的下一个节点
        delNode.next = null;
        size --;
    }

    //判断是否有该元素
    public boolean contains(E e){
        boolean flag = false;
        Node del = linknode.next;
        while (del.e != null){
            if(e.equals(del.e)){
                flag = true;
            }
            del = del.next;//遍历当前元素的下一个元素
        }
        return flag;
    }

    //tostring
    @Override
    public String toString(){
        StringBuffer buffer = new StringBuffer();
        buffer.append(String.format("LinkedDemo size:%d\n", size));
        buffer.append("head:");
        Node cur = linknode.next;
        while(cur != null){
            buffer.append(cur+" -> ");
            cur = cur.next;
        }
        buffer.append("NULL");
        return buffer.toString();
    }

    //node内部类
    private class Node{
        private E e = null;
        private Node next =null;

        public Node(){}
        public Node(E e){
            this.e = e;
        }
        public Node(E e,Node next){
            this.e = e;
            this.next = next;
        }
        @Override
        public String toString(){
            return  e.toString(
            );
        }
    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值