本文主要是介绍leetcode 刷题之路 27 Insertion Sort List,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;}
};
这篇关于leetcode 刷题之路 27 Insertion Sort List的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!