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) {
if(head==NULL) return head;
ListNode* newhead=new ListNode(0);
newhead->next=head;
ListNode*cur=head,*pre=newhead;
while(cur)
{
if(cur->next&&cur->val>cur->next->val)
{
while(pre->next&&pre->next->val<cur->next->val)
{
pre=pre->next;
}
ListNode* temp=cur->next->next;
cur->next->next=pre->next;
pre->next=cur->next;
cur->next=temp;
pre=newhead;
}
else
cur=cur->next;
}
return newhead->next;
}
};