Note:
一共会有三种情况:
Case 1: 要插入的点既不是最大值也不是最小值,在这个链表的中间
Case 2: 要插入的点小于链表的最小值且大于链表的最大值, 那么应该插在tail
Case 3: 链表的所有元素都是uniform values,那么随便插一个位置就行。但是我们依然要遍历完整个链表,因为这样才能确保所有元素都是uniform
corner case: head == null, insert new Node(value)
Key word:
在一个环形链表里插入一个新结点。
class Solution {
public Node insert(Node head, int insertVal) {
Node newNode = new Node(insertVal);
if (head == null) {
newNode.next = newNode;
return newNode;
}
Node cur = head;
while (cur.next != head) {
if (cur.val <= cur.next.val) {
if (insertVal >= cur.val && insertVal <= cur.next.val) {
break;
}
} else {
if (insertVal >= cur.val || insertVal <= cur.next.val) {
break;
}
}
cur = cur.next;
}
Node next = cur.next;
cur.next = newNode;
newNode.next = next;
return head;
}
}
Complexity Analysis:
TC: O(N); only visit all node once
SC: O(1);