解题思路:
一道有关链表的中等题,其实就是分情况讨论的模拟题,首先考虑序列为空和1个的情况,直接插入node即可,超过1的长度就需要循环遍历,又要考虑两种情况,插入的node是在序列中还是在循环交界处,即最大值和最小值的中间(也即node是最大值或者最小值),代码如下:
/*
// 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) {
Node *node = new Node(insertVal);
// 序列中无元素
if(head == nullptr) {
node->next = node;
return node;
}
// 序列中只有一个元素
if(head->next == nullptr) {
head->next = node;
node->next = head;
return head;
}
Node *cur = head, *next = head->next;
while(next != head) {
// node在序列中
if(insertVal >= cur->val && insertVal <= next->val) {
break;
}
// 到达循环交界处
if(cur->val > next->val) {
// 如果node在交界处
if(insertVal > cur->val || insertVal < next->val) {
break;
}
}
cur = next;
next = next->next;
}
cur->next = node;
node->next = next;
return head;
}
};