Sort a linked list using insertion sort.
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
ListNode dummy(-1);
auto *d = &dummy, *next = head;
while (next != NULL) {
auto iter = d, next_next = next->next;
while (iter->next != NULL && iter->next->val < next->val) {
iter = iter->next;
}
next->next = iter->next;
iter->next = next;
next = next_next;
}
return d->next;
}
};
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode insertionSortList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode dummy = new ListNode(0);
ListNode oIter = head, iIter = dummy;
while (oIter != null) {
iIter = dummy;
ListNode oIterNext = oIter.next;
//oIter.next = null;
while (iIter.next != null && iIter.next.val < oIter.val) {
iIter = iIter.next;
}
oIter.next = iIter.next;
iIter.next = oIter;
oIter = oIterNext;
}
return dummy.next;
}
}
时间复杂O(n^2).