问题描述:
用插入排序堆链表排序。
样例:Give 1->3->2->0->NULL,return 0->1->2->3->NULL。
实现思路:
先创建一个头节点,初始时,把原链表的第一个节点插入新链表作为第一个节点。然后依次读原链表的每个节点,把原链表中的节点插在第一个大于该节点 的值的节点之前。
实现代码:
/**
* 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;
}
};
感想:
读入原链表中的每一个节点时,要与新链表中的节点的值进行比较,直到找到最后一个小于该节点的值的节点。