zoukankan      html  css  js  c++  java
  • 147. Insertion Sort List

    • Total Accepted: 92484
    • Total Submissions: 288998
    • Difficulty: Medium
    • Contributors: Admin

    Sort a linked list using insertion sort.

    分析



    按照传统的插入方法,对list进行排序 56ms
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    /**
     * 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 * curi = head, * curj = head;
            ListNode dummy(INT_MIN);
            dummy.next = NULL;
            while(curi != NULL){
                curj = &dummy;
                ListNode * node = curi;
                curi = curi->next;
                while(curj != NULL){
                    if(curj->next == NULL || curj->val<= node->val && curj->next->val > node->val){
                        ListNode * tmp = curj->next;
                        curj->next = node;
                        node->next = tmp;
                        break;
                    }
                    curj = curj->next;
                }
            }
            return dummy.next;
        }
    };

    将list的数值,赋值倒vector<int>中,然后排序结束,再依次赋值回去 19ms
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    /**
     * 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) return head;
            vector<int> list;
            ListNode * h = head;
            while(h != NULL){
                list.push_back(h->val);
                h = h->next;
            }
            sort(list.begin(), list.end());
             
            h = head;
            for(auto val: list){
                h->val = val;
                h = h->next;
            }
            return head;
        }
    };




  • 相关阅读:
    创建或者连接管道+++检查管道空间是否够写入本消息++++删除管道
    从instr中截取第一个delimiter之前的内容放到outstr中,返回第一个delimiter之后的位置
    把数字按网络顺序或主机顺序存放到字符串中++++把字符串按网络顺序转换成数字++++把字符串按主机顺序转换成数字
    压缩空格的函数以及BCD码与ASCII相互转换函数
    判断文件是否存在
    把指定长度字符串转换成数字
    找到特定串在源字符串中的位置
    FTP命令详解
    docker 学习路线
    云原生技术的了解
  • 原文地址:https://www.cnblogs.com/zhxshseu/p/dad1866a95b38dcae0414c24f4c185cb.html
Copyright © 2011-2022 走看看