问题描述:
用插入排序对链表排序
样例
Given 1->3->2->0->null
, return 0->1->2->3->null
解题思路:
用ll,lz分别表示相邻的节点,当前一个节点元素大于后一个节点元素时,需要从头到尾遍历整个链表,找到比后一个节点小的插入其中。
代码实现:
/**
* Definition of ListNode
* 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|| head->next ==NULL)
return head;
ListNode *d=new ListNode;
d->next=head;
ListNode *ll = head ;
ListNode *lz = head->next ;
while(lz!=NULL)
{
if(ll->val > lz->val)
{
ListNode *dummy= d;
while(dummy->next->val<lz->val)
dummy=dummy->next;
ll->next = lz->next;
lz->next = dummy->next;
dummy->next = lz;
}
else
ll=ll->next ;
lz=ll->next;
}
return d->next;
}
};
解题感悟:
要注意逻辑顺序,还要注意dummy的插入位置。