leetcode 刷题之路 27 Insertion Sort List

来源:互联网 发布:淘宝水晶宫论坛vip账号 编辑:程序博客网 时间:2024/06/05 01:54

Sort a linked list using insertion sort.

利用插入排序对一个链表进行排序。

插入排序是将待排序的序列分为部分,分别为有序的部分和无序的部分,排序时每次从无序的部分取出一个元素插入到有序的部分中合适的位置,初始时,有序部分只有一个元素,该元素自有序。根据这个思想,并为了方便起见,我们创建一个头结点dummyHead存储排序后的链表,初始阶段,该链表中只存储无序链表中的第一个元素。随后我们依次从原链表中取出元素加入到该有序链表中合适的位置,使得插入后链表始终有序,直到原链表空,排序结束。 

测试通过程序:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution{public:ListNode *insertionSortList(ListNode *head){if (head == NULL || head->next == NULL) //空链表或者一个元素的链表直接返回return head;ListNode* dummyHead = new ListNode(0);  //创建一个辅助的头结点,存储排序后的链表dummyHead->next = head;//和数组的插入排序一样,第一个节点自有序head = head->next;dummyHead->next->next = NULL;ListNode *p;ListNode *q;while (head != NULL){p = head;head = head->next;q = dummyHead;while (q->next != NULL)//依次将无序链表的节点插入到有序链表中{if (q->next->val <= p->val)//=保证稳定性q = q->next;elsebreak;}p->next = q->next;q->next = p;}p = dummyHead->next;delete dummyHead;return p;}};


0 0
原创粉丝点击