力扣打卡:剑指 Offer II 029. 排序的循环链表
解题思路
目前为止,做过的最恶心的题目,明明逻辑就是很简单,但细节一直扣扣扣
- 如果
head==null 那么构造节点返回 - 找出最小值,并且是从
head 开始多个相等的最小值的最后一个 - 找到最小值,并且是从
head 开始多个相等的最小值的第一个,同时记录第一个最小值的前一个节点 prev - 如果
insertVal <= min.val ,那么直接在第一个节点的前一个节点prev后插入即可 - 如果
insertVal > min.val ,那么遍历一边环串,条件是从最后一个最小值开始,不经过第一个最小值,找出位置进行插入 - 返回即可
代码
class Solution {
public Node insert(Node head, int insertVal) {
if(head==null){
head = new Node(insertVal);
head.next = head;
return head;
}
Node node = head.next;
Node min = head;
while(node!=head){
min = min.val < node.val ? min : node;
node = node.next;
}
Node prev = min;
node = min.next;
while(node.val!=min.val) {prev=prev.next; node=node.next;}
if(insertVal<=min.val){
prev.next = new Node(insertVal);
prev = prev.next;
prev.next = node;
return head;
}
Node p = min;
node = min.next;
while(node.val!=min.val){
if(insertVal>=node.val) p = node;
node = node.next;
}
node = p.next;
p.next = new Node(insertVal);
p = p.next;
p.next = node;
return head;
}
}
|