Sort a linked list using insertion sort.
思路:
使用插入排序的方式将一个链表进行排序。可以根据给定的节点,先返回插入位置,然后将节点插入即可。
代码如下所示:
/**
* 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 *dummy=new ListNode(0);
ListNode *p=head;
while(p)
{
ListNode *position=getInsertPosition(dummy,p->val);
ListNode *tmp=position->next;
ListNode *tmp2=p->next;
position->next=p;
p->next=tmp;
p=tmp2;
}
return dummy->next;
}
//寻找链表中的插入位置
ListNode* getInsertPosition(ListNode *dummy,int val)
{
ListNode *p=dummy->next;
if(p==NULL)
{
return dummy;
}
ListNode *pre=dummy;
while(p)
{
if(p->val<val)
{
pre=p;
p=p->next;
}
else
break;
}
return pre;
}
};