【LeetCode-中等题】707. 设计链表

题目

在这里插入图片描述

方法一:单向链表实现

  1. 新增或删除一个位置的节点==找到这个位置的前一个节点即可
class MyLinkedList {
    
    
    int size;
    ListNode head;

    public MyLinkedList() {
    
    
        size = 0;
        head = new ListNode(0);
    }

    public int get(int index) {
    
    
      if(index < 0 || index > size-1 ) return -1;  //注意index的范围是下标范围 
      ListNode pre = head;
      while(index >= 0){
    
    //找index位置的节点
          pre = pre.next;
          index --;
      }
      return pre.val;
    }

    public void addAtHead(int val) {
    
    
        addAtIndex(0, val);
    }

    public void addAtTail(int val) {
    
    
        addAtIndex(size, val);
    }

    public void addAtIndex(int index, int val) {
    
    
       if(index < 0 || index > size) return ;//注意index的范围是0到size  不是size-1  因为最后最大下标后面也可插入
       ListNode pre = head;
       while(index > 0){
    
    //找index前面一个节点的位置
           pre = pre.next;
           index -- ;
       }
       ListNode cur = new ListNode(val);
       cur.next = pre.next;
       pre.next =cur;
       size++;
    }

    public void deleteAtIndex(int index) {
    
    
       if(index < 0 || index >size-1) return ;//注意index的范围是0到size-1  
        ListNode pre = head;
         while(index > 0){
    
    //找index前面一个节点的位置
           pre = pre.next;
           index -- ;
       }
       pre.next = pre.next.next;
       size--;
    }
}

class ListNode {
    
    //定义单链表
    int val;
    ListNode next;

    public ListNode(int val) {
    
    
        this.val = val;
    }
}


方法二:

猜你喜欢

转载自blog.csdn.net/weixin_45618869/article/details/132824746