题目:
用插入排序对链表排序
Given 1->3->2->0->null
, return 0->1->2->3->null
首先申请一个dummy,先拿一个数(这个数前面是已经排好序的),看后面的数是不是比它小,比它小的放到它前面(初始化node等于dummy,对node进行遍历判断这个数大小从而确定他的位置),然后递归这个数head=head->next;
最后返回dummy->next;
代码:
/**
* 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
//ListNode *T=head;
ListNode *dummy=new ListNode;
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;
}
};
感想:这道题老师在上课时讲过,但是这道题我也不是一遍过的,因为这道题是我头几个做的,老师有一些小问题,比如没有递归了,指派出现问题等一些编程问题,现在看来也就没有问题了。其实这道题里的dummy和node的处理我也是一直感觉是这段代码最好的地方。