Leetcode147. Insertion Sort List对链表进行插入排序

对链表进行插入排序。

从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。

每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。

插入排序算法:

  1. 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
  2. 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
  3. 重复直到所有输入数据插入完为止。

示例 1:

输入: 4->2->1->3 输出: 1->2->3->4

示例 2:

输入: -1->5->3->4->0 输出: -1->0->3->4->5

class Solution {
public:
    ListNode* insertionSortList(ListNode* head) 
    {
        if(head == NULL)
            return NULL;
        ListNode *node = head ->next;
        ListNode *newhead = new ListNode(0);
        newhead ->next = head;
        head ->next = NULL;
        while(node != NULL)
        {
            ListNode *last = newhead;
            ListNode *cur = newhead ->next;
            ListNode *nextNode = node ->next;
            bool isInsert = false;
            while(cur != NULL)
            {
                if(node ->val > cur ->val)
                {
                    last = cur;
                    cur = cur ->next;
                }
                else
                {
                    isInsert = true;
                    last ->next = node;
                    node ->next = cur;
                    break;
                }
            }
            if(!isInsert)
            {
                last ->next = node;
                node ->next = NULL;
            }
            node = nextNode;
            if(nextNode != NULL)
                nextNode = nextNode ->next;
        }
        return newhead ->next;
    }
};

原文地址:https://www.cnblogs.com/lMonster81/p/10433828.html