0708. Insert Into a Sorted Circular Linked List

708. Insert into a Sorted Circular Linked List #

题目 #

给定 循环单调非递减列表 中的一个点,写一个函数向这个列表中插入一个新元素 interval,使这个列表仍然是循环非降序的。

给定的可以是这个列表中任意一个顶点的指针,并不一定是这个列表中最小元素的指针。

如果有多个满足条件的插入位置,可以选择任意一个位置插入心得值,插入后整个列表仍然保持有序。

如果列表为空(给定的节点是 null),需要创建一个循环有序列表并返回这个节点。否则,返回原先给定的节点。

思路 #

代码 #

class Node {
    public int val;
    public Node next;
    
    public Node() {}
    public Node(int _val) { val = _val; }
    public Node(int _val, Node _next) { val = _val; next = _next; }
}

class Solution {
    public boolean canInsert (Node head, int insertVal) {
        if (head.val == insertVal) return true;
        if (head.val < insertVal && insertVal < head.next.val) return true;
        if (head.val > head.next.val && head.val < insertVal) return true;
        if (head.val > head.next.val && insertVal < head.next.val) return true;
        return false;
    }
    public Node insert(Node head, int insertVal) {
        if (head == null) {
            Node ring = new Node(insertVal);
            ring.next = ring;
            return ring;
        }
        else {
            Node ptr = head;
            while (ptr.next != head && canInsert(ptr, insertVal) == false) ptr = ptr.next;
            ptr.next = new Node(insertVal, ptr.next);
            return head;
        }
    }