• LeetCode OJ-- Insertion Sort List **


    https://oj.leetcode.com/problems/insertion-sort-list/

    链表实现插入排序

    首先插入排序是指:

    a b c d e g m 对b也就是第二个位置选做元素num开始遍历n-1次

    对每个num,找到从第0个位置开始,它应该待的位置,把它插入进去。

    对于链表来说,首先new一个 dummy 节点,这样比较方便对 head的操作 dummy->next = head。

    然后从head->next为第二个元素,也就是从它开始遍历处理

    每一次处理中从 dummy->next作为开始,因为 head 可能已经换位置了.

    记录当前处理的位置的上一个位置,这样如果需要把这个点插入到前面,也就是从这个位置删除的话,就 before->next = num->next相当于删除了。

    同时为了插入,即在合适的位置插入,需要记录要插入的上一个位置 num->next = pointer, before_should->next = num,相当于插入了。

     1 struct ListNode {
     2       int val;
     3       ListNode *next;
     4       ListNode(int x) : val(x), next(NULL) {}
     5   };
     6  
     7 class Solution {
     8 public:
     9     ListNode *insertionSortList(ListNode *head) {
    10         if(head == NULL)
    11             return NULL;
    12         
    13 
    14         ListNode *dummy = new ListNode(-1);
    15         dummy->next = head;
    16         ListNode *before = head;
    17         ListNode *before_bigger = dummy;
    18 
    19         for(ListNode *num = head->next; num!=NULL; num = num->next)
    20         {
    21             ListNode *point = NULL;
    22             bool flag = false;
    23             before_bigger = dummy;
    24             for(point = dummy->next; point!= num; point=point->next)
    25             {
    26                 if(point->val > num->val)
    27                 {
    28                     flag = true;
    29                     break;
    30                 }
    31                 before_bigger = before_bigger->next;
    32             }
    33 
    34             //need insert
    35             if(flag)
    36             {
    37                 before->next = num->next;
    38                 before_bigger->next = num;
    39                 num->next = point;
    40                 num = before;
    41             }
    42             else 
    43             {
    44                 before = before->next;
    45             }
    46         }
    47         return dummy->next;
    48     }
    49 };
  • 相关阅读:
    [Java] 使用@SelectProvider注解实现多表关联查询(全注解,不使用不配置xml)
    c#winform线程间操作UI的五种方法
    C#调用Excel,拷贝图表到其他Excel文档中
    VisualSvn破解、VS2017以上版本的VisualSvn破解
    汉字数据库,汉字大全,JSON格式汉字数据,收录16159个汉字
    golang Logrus简易使用教程
    excel操作-基础篇
    02-PyQt5程序基本结构分析
    QObject信号的操作
    基于webGL三维停车场,可视化管理Demo
  • 原文地址:https://www.cnblogs.com/qingcheng/p/3818599.html
Copyright © 2020-2023  润新知