LeetCode 剑指 Offer II 029. 排序的循环链表
题目描述
给定循环单调非递减列表中的一个点,写一个函数向这个列表中插入一个新元素 insertVal ,使这个列表仍然是循环升序的。
给定的可以是这个列表中任意一个顶点的指针,并不一定是这个列表中最小元素的指针。
如果有多个满足条件的插入位置,可以选择任意一个位置插入新的值,插入后整个列表仍然保持有序。
如果列表为空(给定的节点是 null),需要创建一个循环有序列表并返回这个节点。否则。请返回原先给定的节点。
示例 1:
输入:head = [3,4,1], insertVal = 2
输出:[3,4,1,2]
LeetCode 剑指 Offer II 029. 排序的循环链表
提示:
0 <= Number of Nodes <= 5 * 10^4
-10^6 <= Node.val <= 10^6
-10^6 <= insertVal <= 10^6
一、解题关键词
有序 、 插入、单调非递减列
二、解题报告
1.思路分析
2.时间复杂度
3.代码示例
/*
// Definition for a Node.
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 Node insert(Node head, int insertVal) {
Node node = new Node(insertVal);
if(head == null){
//没有节点的
head = node;
head.next = node;
return head;
}
Node curr = head;
while(true){
if(curr.next.val >= insertVal && curr.val <= insertVal){
break;
}
if(curr.next.val < curr.val ){
if(insertVal >= curr.val || insertVal <= curr.next.val){
break;
}
}
if(curr.next == head){
break;
}
curr = curr.next;
}
Node next = curr.next;
curr.next = node;
node.next = next;
return head;
}
}
2.知识点
遍历迭代所有元素进行比较