问题:
Sort a linked list using insertion sort.
分析:
一般在array上实现的insertion sort,都是向之前的方向移动,找到自己的位置。而现在一个list不能向前移动,所以我们通过从头开始向后走的方式找到每一个node应该在的位置。List的题很考验功底,因为一个不小心哪里细节没注意就会出错。
代码:
class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
if (!head) return head;
ListNode dummy(0);
dummy.next = head;
ListNode *curr = head;
while (curr->next) {
ListNode *temp = &dummy;
bool moved = false;
while (temp != curr) {
if (temp->next->val <= curr->next->val)
temp = temp->next;
else {
ListNode *next = curr->next->next;
curr->next->next = temp->next;
temp->next = curr->next;
curr->next = next;
moved = true;
break;
}
}
if (!moved) curr = curr->next;
}
return dummy.next;
}
};