zoukankan      html  css  js  c++  java
  • 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 Code:

    /**
     * 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) {
            ListNode* dummy = new ListNode(0);
            ListNode* cur = head;
            dummy->next = head;
            ListNode* prev = NULL;
            ListNode* temp = NULL;
            while (cur != NULL && cur->next != NULL) {
                if (cur->val <= cur->next->val) {
                    cur = cur->next;
                } else {
                    temp = cur->next;
                    cur->next = temp->next;
                    prev = dummy;
                    while (prev->next->val <= temp->val) {
                        prev = prev->next;
                    }
                    temp->next = prev->next;
                    prev->next = temp;
                }
            }
            return dummy->next;
        }
    };
    
    Runtime: 12 ms, faster than 99.91% of C++ online submissions for Insertion Sort List.
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    linux命令整理
    各种提权姿势总结
    常用端口信息说明和利用
    近年来爆发的CVE漏洞编号
    一个优秀的SSH远程终端工具
    python-读写文件的方式
    kali安装ssh服务
    一套实用的渗透测试岗位面试题
    使用 python快速搭建http服务
    asciinema使用
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9870780.html
Copyright © 2011-2022 走看看