题目:
用插入排序对链表排序
样例:
Given 1->3->2->0->null
, return 0->1->2->3->null
思路:
新建一个以dummy开头的链表,并将dummy赋初值为0。令node=dummy,通过移动新链表中的node与要排序的链表中的head,并比较node与head的值,来实现排序。如果head的值大于node的值,就将该节点插入到node的后面,然后再将node从新链表的开头开始移动,并比较head的值,然后找适当位置插入。
具体实现代码:
/**
* 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) {
ListNode *dummy=new ListNode(0);
while(head!=NULL){
ListNode *node=dummy;
while(node->next!=NULL&&(node->next)->val<head->val){
node=node->next;
}
ListNode *temp=head->next;
head->next=node->next;
node->next=head;
head=temp;
}
return dummy->next;
}
};
感想:
通过比较数值,将旧链表的结点插入到新链表中来实现排序,是一种做题的新方法。