Question:
Sort a linked list using insertion sort.
思路:本题采用直接插入排序。
Answer:
/**
* 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)
{
return NULL;
}
else
{
ListNode* q = head->next;
head->next = NULL;
while(q!=NULL)
{
ListNode* p = head;
if(q->val < p->val)
{
head = q;
q=q->next;
head->next=p;
}
else
{
while(p!=NULL)
{
if(p->next ==NULL)
{
p->next =q;
q=q->next;
p->next->next = NULL;
break;
}
else
{
if(q->val < p->next->val)
{
ListNode* tmp = p->next;
p->next = q;
q=q->next;
p->next->next = tmp;
break;
}
p=p->next;
}
}
}
}
return head;
}
}
};
Run code results:
Your input
[3 2 3 6 1 8 3 0 4 2 5 6 1 13 9 15]
Your answer
[0,1,1,2,2,3,3,3,4,5,6,6,8,9,13,15]
Expected answer
[0,1,1,2,2,3,3,3,4,5,6,6,8,9,13,15]