题目大意:
对一个单向链表进行插入排序。
c++代码:
class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
if(head == NULL || head->next == NULL)
return head;
ListNode* begin = head;
ListNode* pre = head;
ListNode* cur = head->next;
begin->next = NULL;
ListNode* insert_pos = begin;
while(cur != NULL)
{
pre = begin;
insert_pos = begin;
//find the insert position
while(insert_pos != NULL)
{
if(insert_pos->val > cur->val)
break;
pre = insert_pos;
insert_pos = insert_pos->next;
}
//tmp is the node which will insert to sort list
ListNode* tmp = cur;
cur = cur->next;
//if it is the end of the sort list
if(insert_pos == NULL)
{
pre->next =tmp;
pre->next->next = NULL;
}
else
{
//if the sort list just have one node
if(insert_pos == pre)
{
tmp->next = insert_pos;
begin = tmp;
}
else// the postion is in the middle of sort list
{
pre->next = tmp;
tmp->next = insert_pos;
}
}
}
return head = begin;//reset head pointer to begin
}
};