一、题目地址
https://leetcode-cn.com/problems/4ueAj6/
二、具体代码
/**
* // Definition for a Node.
* function Node(val, next) {
* this.val = val;
* this.next = next;
* };
*/
/**
* @param {Node} head
* @param {number} insertVal
* @return {Node}
*/
// 时间复杂度;O(N),N为链表的节点个数
// 空间复杂度:O(1)
var insert = function(head, insertVal) {
if(head === null) {
let node = new Node(insertVal);
node.next = node;
return node;
}
let prev = head;
let cur = head.next;
/*
算法总体思想:
清楚insertVal的值分三种情况:
(1)insertVal的值小于环中的所有值时;
(2)insertVal的值大于环中的所有值时;
(3)insertVal的值和环中的所有值都相等时;
*/
while(cur !== head) {
// 1、第一种情况:insertVal的值小于prev的值,且大于cur的值时,直接进行插入
if(insertVal >= prev.val && insertVal <= cur.val) {
prev.next = new Node(insertVal);
prev.next.next = cur;
return head;
}else if(prev.val > cur.val){ //2、
// 2、第二种情况:val的值小于环中的所有值时
if(insertVal > prev.val || insertVal < cur.val) {
prev.next = new Node(insertVal);
prev.next.next = cur;
return head;
}
}
prev = prev.next;
cur = cur.next;
}
//3、第三种情况:val的值大于环中的所有值时
prev.next = new Node(insertVal);
prev.next.next = cur;
return head;
};
三、补充部分
关注公众号:【深漂程序员小庄】:
内含丰富的学习资源和面试经验(不限前端、java),还有学习交流群可加,并且还有各大厂大佬可一起交流学习,一起进步~添加小庄微信,回复【加群】,可加入互联网技术交流群: