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

文章目录

    • 题目
    • 方法一:单向链表实现
    • 方法二:

题目

【LeetCode-中等题】707. 设计链表_第1张图片

方法一:单向链表实现

  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;
    }
}


方法二:

你可能感兴趣的:(力扣,#,中等题,leetcode,链表,算法)