LeetCode Day03 203&707&206

221 阅读1分钟

今天太累了qwq代码思路改天补上。浅浅刷三题,放上代码。

203. 移除链表元素

 public ListNode removeElements(ListNode head, int val) {
        while(head != null && head.val == val){
            head = head.next;
        }

        ListNode curr = head;
        while(curr != null){
            while(curr.next!=null && curr.next.val == val){
                curr.next = curr.next.next;
            }
            curr = curr.next;
        }

        return head;
    }

707. 设计链表

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

class MyLinkedList {

    int size;
    ListNode head, tail;

    public MyLinkedList() {
        this.size = 0;
        this.head = new ListNode(0);
        this.tail = new ListNode(0);
        head.next = tail;
        tail.prev = head;
    }
    
    public int get(int index) {
        if(index < 0 || index >= size){
            return -1;
        }
        ListNode cur = this.head;
        if(index >= size / 2){
            cur = tail;
            for(int i = 0; i < size - index; i ++){
                cur = cur.prev;
            }
        } else {
            for(int i = 0; i <= index; i ++){
                cur = cur.next;
            }
        }

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

        if(index < 0){
            index = 0;
        }
        size ++;
        ListNode pre = this.head;
        for(int i = 0; i < index; i ++){
            pre = pre.next;
        }
        ListNode newNode = new ListNode(val);
        newNode.next = pre.next;
        pre.next.prev = newNode;
        newNode.prev = pre;
        pre.next = newNode;
    }
    
    public void deleteAtIndex(int index) {
        if(index < 0 || index >= size){
            return;
        }
        size --;
        ListNode pre = this.head;
        for(int i = 0; i < index; i ++){
            pre = pre.next;
        }
        pre.next.next.prev = pre;
        pre.next = pre.next.next;
    }
}

/**
 * Your MyLinkedList object will be instantiated and called as such:
 * MyLinkedList obj = new MyLinkedList();
 * int param_1 = obj.get(index);
 * obj.addAtHead(val);
 * obj.addAtTail(val);
 * obj.addAtIndex(index,val);
 * obj.deleteAtIndex(index);
 */

206. 反转链表

public ListNode reverseList(ListNode head) {
        return reverse(null, head);
    }

    private ListNode reverse(ListNode prev, ListNode cur){
        if(cur == null){
            return prev;
        }

        ListNode temp =  null;
        temp = cur.next;
        cur.next = prev;
        return reverse(cur, temp);
    }