题目地址:
https://www.lintcode.com/problem/insert-into-a-cyclic-sorted-list/description
给定一个有序循环链表,再给定一个数,要求将其插入该链表使得链表仍然有序。参考https://blog.csdn.net/qq_46105170/article/details/105571555。代码如下:
public class Solution {
/*
* @param node: a list node in the list
* @param x: An integer
* @return: the inserted new list node
*/
public ListNode insert(ListNode node, int x) {
// write your code here
ListNode xNode = new ListNode(x);
if (node == null) {
return xNode;
}
ListNode prev = node;
do {
if (prev.val <= x && x <= prev.next.val) {
break;
}
prev = prev.next;
} while (prev != node);
if (prev.val <= x && x <= prev.next.val) {
return insertNode(prev, xNode);
}
do {
if (prev.val > prev.next.val) {
break;
}
prev = prev.next;
} while (prev != node);
return insertNode(prev, xNode);
}
private ListNode insertNode(ListNode prev, ListNode insert) {
insert.next = prev.next;
prev.next = insert;
return insert;
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。