Java实现 MyLinkedList

Java实现 MyLinkedList

**实现:

  • add(e);
  • add (int index,String e);
  • remove (int index);
  • contains (String e);
  • indexOf (String e)
  • lastIndexOf (String e);
  • isEmpty ();
  • get (int index)
  • set (int index,String e)
  • clear ()

**


public class MyLinkedlist {
    public Node head;
    public Node last;
    public int size;

    //先是一个空链表
    public MyLinkedlist(){
        head = null;
        last = null;
        size = 0;
    }

    //尾插 o(1)
    public boolean add(String e){
        Node node = new Node(e);

       if (head == null){
           head = last = node;
       }else{
           node.prev = last;
           last.next = node;
           last = node;
       }
       size++;
        return true;
    }

    public void add(int index,String e) {
        Node node = new Node(e);
        if (index < 0 || index > size()) {
            throw new ArrayIndexOutOfBoundsException();
        }
        if (size == 0){
            head = last = node;
        }
        if (index == 0) {

            node.next=head;
            head.prev=node;
            head = node;
        } else if(index == size()) {
            add(e);
        }else{

            Node prev = head;
            for (int i = 0; i < index - 1; i++) {
                prev = prev.next;
            }
            Node next = prev.next;

            prev.next = node;
            next.prev = node;
            node.prev = prev;
            node.next = next;

        }
        size++;
    }

    public  int size(){
        return size;
    }



    //remove
    public String remove(int index){
        if (index<0 ||index>=size()){
            throw new ArrayIndexOutOfBoundsException();
        }
        String e;
        if (size==1){
            e = head.val;
            head = last = null;
        }else if (index==0){
            e = head.val;
            head = head.next;
            head.prev = null;
        }else if(index==size()-1){
            e = last.val;
            last = last.prev;
            last.next=null;
        }else {
            Node toDelete = head;
            for (int i=0;i<index;i++) {
                toDelete = toDelete.next;
            }
            e = toDelete.val;
            Node prev = toDelete.prev;
            Node next = toDelete.next;
            prev.next = next;
            next.prev = prev;

        }
        size--;
        return e;
    }


    public  boolean contains(String e){
        for (Node cur =head;cur!= null;cur=cur.next){
            if (cur.val.equals(e)){
                return  true;
            }
        }
        return false;
    }

    public  int indexOf(String e){
        int i = 0;
        for (Node cur = head;cur!=null;cur = cur.next){
            if (cur.val.equals(e)){
                return i;
            }
            i++;
        }
        return -1;
    }


    public  int lastIndexOf(String e){
        int i = size-1;
        for (Node cur = last;cur!=null;cur = cur.prev){
            if (cur.val.equals(e)){
                return i;
            }
            i--;
        }
        return -1;
    }
    public  boolean isEmpty(){
        return size==0;
    }
    //o(n)
    public String get(int index){
        if (index<0 ||index>=size()){
            throw new ArrayIndexOutOfBoundsException();
        }
        Node cur =head;
        for (int i=0;i<index-1;i++) {
            cur = cur.next;
        }
        return cur.val;
    }


//o(n)
    public String set(int index,String e){
        if (index<0 ||index>=size()){
            throw new ArrayIndexOutOfBoundsException();
        }
        Node cur =head;
        for (int i=0;i<index-1;i++) {
            cur = cur.next;
        }
        String old = cur.val;
        cur.val = e;
        return old;
    }
    
   public void clear(){
        head =null;
        last = null;
        size =0;
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值