文章目录
- 1. 题目
- 2. 解题
1. 题目
给定循环升序列表中的一个点,写一个函数向这个列表中插入一个新元素,使这个列表仍然是循环升序的。
给定的可以是这个列表中任意一个顶点的指针,并不一定是这个列表中最小元素的指针。
如果有多个满足条件的插入位置,你可以选择任意一个位置插入新的值,插入后整个列表仍然保持有序。
如果列表为空(给定的节点是 null),你需要创建一个循环有序列表并返回这个点。
否则。请返回原先给定的节点。
下面的例子可以帮你更好的理解这个问题:
在上图中,有一个包含三个元素的循环有序列表,你获得值为 3 的节点的指针,我们需要向表中插入元素 2。
新插入的节点应该在 1 和 3 之间,插入之后,整个列表如上图所示,最后返回节点 3。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/insert-into-a-sorted-circular-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 找
下一个节点 >= insert
&&当前节点 <= insert
的节点 - 没有找到说明是最大或者最小值,记录值最大的最后一个节点
/*
// Definition for a Node.
class Node {
public:int val;Node* next;Node() {}Node(int _val) {val = _val;next = NULL;}Node(int _val, Node* _next) {val = _val;next = _next;}
};
*/class Solution {
public:Node* insert(Node* head, int insertVal) {if(!head){head = new Node(insertVal);head->next = head;return head;}Node *newnode = new Node(insertVal);Node* biggest = head, *cur = head;int biggestVal = head->val;//最大值while(true){if(cur->val <= insertVal && cur->next->val >= insertVal){ //找到了newnode->next = cur->next;cur->next = newnode;return head;}if(cur->val >= biggestVal){ //记录最大值节点biggestVal = cur->val;biggest = cur;}if(cur->next == head)//转了一圈了break;cur = cur->next;}newnode->next = biggest->next;//插入的是最大值或最小值biggest->next = newnode;return head;}
};
20 ms 8.3 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!