Insertion Sort List
Sort a linked list using insertion sort.
Basic question.
//Should I solve this problem in place?
//Contains duplicates values?
/**
* 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) {
ListNode * re = NULL;
while(head != NULL){
//first step
if(re == NULL){
re = head;
head = head->next;
re->next = NULL;
}
else{
ListNode * next = head->next;
ListNode * prev = NULL;
for(ListNode * p = re; p != NULL; p = p->next){
if(p->val > head->val){
break;
}
prev = p;
}
if(prev == NULL){
head->next = re;
re = head;
}
else{
head->next = prev->next;
prev->next = head;
}
head = next;
}
}
return re;
}
};
