提示
LintCode中的相关算法题实现代码,可以在我的GitHub中下载。
题目需求
用插入排序对链表排序
样例
Given 1->3->2->0->null
, return 0->1->2->3->null
解题思路
/**
* Definition of singly-linked-list:
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: The first node of linked list.
* @return: The head of linked list.
*/
ListNode * insertionSortList(ListNode * head) {
// write your code here
if(head==NULL) return NULL;
ListNode* newHead=head;
ListNode* q=head;
ListNode* p=head->next;
ListNode* prev=NULL;
ListNode* t=NULL;
q->next=NULL;
newHead->next=NULL;
while(p)
{
while(newHead)
{
if(newHead->val<=p->val)
{
prev=newHead;
newHead=newHead->next;
}
else
break;
}
t=p->next;
if(prev==NULL)
{
p->next=q;
q=p;
}
else
{
prev->next=p;
p->next=newHead;
}
newHead=q;
prev=NULL;
p=t;
}
return q;
}
};
主要按照插入排序,不过要注意链表的性质,记住链表的开始位置。