147. Insertion Sort List
Input: 4->2->1->3
Output: 1->2->3->4Input: -1->5->3->4->0
Output: -1->0->3->4->5ListNode* insertionSortList(ListNode* head) { // time: O(n^2); space: O(1)
ListNode *dummy = new ListNode(-1e7), *pre = dummy, *cur = head;
dummy->next = head;
while (cur) {
if (cur->next && cur->val > cur->next->val) {
while (pre->next && pre->next->val < cur->next->val) {
pre = pre->next;
}
// Insert cur->next into pre->next
ListNode* tmp = pre->next;
pre->next = cur->next;
cur->next = cur->next->next;
pre->next->next = tmp;
// reset pre to dummy
pre = dummy;
} else {
cur = cur->next;
}
}
ListNode* res = dummy->next;
delete dummy;
return res;
}Last updated
