代码随想录算法训练营第三天|203.移除链表元素、707.设计链表、206.反转链表

255 阅读1分钟

203.移除链表元素

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode protect = new ListNode(0, head);
        ListNode p = protect.next;
        ListNode last = protect;
        while (p != null) {
            if (p.val == val) {
                last.next = p.next;
            } else {
                last = p;
            }
            p = p.next;
        }
        return protect.next;
    }
}

707.设计链表

不要分神。

class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

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

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

class MyLinkedList {
    ListNode head;

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

    public int get(int index) {
        if (index < 0 || index >= head.val) return -1;
        ListNode p = head;
        while (p != null && index >= 0) {
            p = p.next;
            index--;
        }
        if (p == null) return -1;
        return p.val;
    }

    public void addAtHead(int val) {
        head.val++;
        ListNode node = new ListNode(val, head.next);
        head.next = node;
    }

    public void addAtTail(int val) {
        head.val++;
        ListNode p = head;
        while (p.next != null) {
            p = p.next;
        }
        ListNode node = new ListNode(val, null);
        p.next = node;
    }

    public void addAtIndex(int index, int val) {
        if (index <= 0) addAtHead(val);
        else if (index > head.val) ;
        else if (index == head.val) addAtTail(val);
        else {
            head.val++;
            ListNode p = head;
            while (p != null && index > 0) {
                index--;
                p = p.next;
            }

            ListNode node = new ListNode(val, p.next);
            p.next = node;

        }
    }

    public void deleteAtIndex(int index) {
        if (index < 0 || index >= head.val) {
            ;
        } else {
            head.val--;
            ListNode p = head;
            while (p != null && index > 0) {
                index--;
                p = p.next;
            }
            p.next = p.next.next;
        }
    }
}

206.反转链表

class Solution {
    public ListNode reverseList(ListNode p) {
        ListNode last = null;
        while (p != null) {
            ListNode next = p.next;
            p.next = last;
            last = p;
            p = next;
        }
        return last;
    }
}