LeetCode: 147. Insertion Sort List

LeetCode: 147. Insertion Sort List

题目描述

Sort a linked list using insertion sort.

A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list.
With each iteration one element (red) is removed from the input data and inserted in-place into the sorted list

Algorithm of Insertion Sort:

  1. Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list.
  2. At each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there.
  3. It repeats until no input elements remain.

Example 1:

Input: 4->2->1->3
Output: 1->2->3->4

Example 2:

Input: -1->5->3->4->0
Output: -1->0->3->4->5

题目大意:对链表进行插入排序

解题思路

新建一个已排序的链表,然后将未排序链表的节点一个一个插入已排序链表中。

AC 代码

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
class Solution {
    // 插入操作:将 head 按顺序插入 sortedList,同时将 head 指向其下一个指针
    void insertNode2SortedList(ListNode*& sortedList, ListNode*& head)
    {
        if(sortedList->next == nullptr || sortedList->next->val > head->val)
        {
            ListNode* backNodes = sortedList->next;
            sortedList->next = head;
            head = head->next;
            sortedList->next->next = backNodes;
        }
        else
        {
            insertNode2SortedList(sortedList->next, head);
        }
    }
public:
    ListNode* insertionSortList(ListNode* head) {
        // 新建已排序链表
        ListNode* sortedList = new ListNode(INT_MIN);
        while(head != nullptr)
        {
            // 将未排序链表的节点插入已排序链表中
            insertNode2SortedList(sortedList, head);
        }

        ListNode* ans = sortedList->next;
        delete sortedList;

        return ans;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-24 13:39
在记录秋招的大魔王很...:别被忽悠了,我做了多年销售。我可以告诉你,这就是忽悠你的,销售一定要看底薪也要看提成两者不可缺一。提成是有业绩的时候才拿的到的,谁能保证一直有单状态都好。销售有时候很讲究运气的。底薪是你这个人这个岗位日常工作体现的价值。别小看底薪,你看那些跳槽去做经理主管的,底薪底一些,人家愿意去吗?所以那些说销售靠提成的纯属忽悠,除非他们的业务很容易成单。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务