707. 设计链表

class MyLinkedList {

    int size;
    ListNode dummyHead;

    public MyLinkedList() {

        size = 0;
        dummyHead = new ListNode(-1);
    }

    /**
     * 定义一个获取任意索引前一个节点的方法
     */
    public ListNode getPrev(int index){

        if (index < 0 || index >= size){
            return null;
        }

        ListNode prev = dummyHead;

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

        return prev;
    }

    public int get(int index) {

        ListNode prev = getPrev(index);

        if (prev != null){
            return prev.next.val;
        }
        else {
            return -1;
        }
    }

    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 > size){
            return;
        }

        if (index < 0){
            index = 0;
        }

        ListNode prev = dummyHead;

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

        ListNode temp = new ListNode(val);
        temp.next = prev.next;
        prev.next = temp;
        size++;
    }

    public void deleteAtIndex(int index) {

        ListNode prev = getPrev(index);

        if (prev != null && prev.next != null){

            prev.next = prev.next.next;
            size--;
        }
    }
}

class ListNode{

    int val;
    ListNode next;

    public ListNode(){}

    public ListNode(int val){

        this.val = val;
    }
}

https://leetcode-cn.com/problems/design-linked-list/

posted @ 2022-02-18 09:33  振袖秋枫问红叶  阅读(23)  评论(0)    收藏  举报