思路:
主要是考虑插入情况,如果插入的数在两个数中间,就直接插入,如果没有这种情况,那么这个数一定是大于最大值或者小于最小值的情况下,那么它一定是插入最大最小值节点中间的。当然第一步要找到最大值的节点。
其次考虑边界情况,如果整个链表中没有一个节点,那么直接插入,next指向自己。如果链表中只有一个节点,那么插入后互相连接就行了。
class Solution {
public:
Node* insert(Node* head, int insertVal)
{
Node* node = new Node(insertVal);
if (head == nullptr)
{
head = node;
node->next = head;
}
if (head->next == nullptr)
{
head->next = node;
node->next = head;
}
else
{
insertCore(head, node);
}
return head;
}
void insertCore(Node* head, Node* node)
{
Node* cur = head;
Node* next = head->next;
Node* biggest = head;
while (!(cur->val <= node->val && next->val >= node->val) && next != head)
{
cur = next;
next = next->next;
if (cur->val >= biggest->val)
biggest = cur;
}
if (cur->val <= node->val && next->val >= node->val)
{
cur->next = node;
node->next = next;
}
else
{
node->next = biggest->next;
biggest->next = node;
}
}
};