/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
if(head == NULL || head->next == NULL)
return head;
ListNode* newHead = head;
ListNode* hi = head->next;
ListNode* hiPre = head;
ListNode* hj = head;
ListNode* pre = NULL;
while(hi != NULL)
{
while(hj != NULL && hj != hi && hj->val <= hi->val)
{
pre = hj;
hj = hj->next;
}
if(hj == NULL)
break;
if(hj == hi)
{
hiPre = hi;
hi = hi->next;
}
else if(pre == NULL)
{
//delete
hiPre->next = hiPre->next->next;
//insert
ListNode* tmp = newHead;
newHead = hi;
newHead->next = tmp;
hi = hiPre->next;
}
else
{
//delete
hiPre->next = hiPre->next->next;
ListNode* tmp = pre;
pre->next = hi;
hi->next = hj;
hi = hiPre->next;
}
hj = newHead;
pre = NULL;
}
return newHead;
}
};
LeetCode ||Insertion Sort List
最新推荐文章于 2022-10-08 18:56:27 发布