zoukankan      html  css  js  c++  java
  • LeetCode 147. 对链表进行插入排序(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
    

    解题思路

    从链表头部开始遍历,记录当前要插入排序的节点和其上一个节点,对每个节点执行如下操作:

    • 从头部开始找到当前节点之前第一个不大于它的节点,记录找到的节点以及它前一个节点
    • 如果它前一个节点为空,说明要插入到头节点之前,若不为空,则插入到该节点之后
    • 继续进行下一次插入排序,直到遍历到链表尾部

    代码

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* insertionSortList(ListNode* head) {
    12         if(head == NULL) return NULL;
    13         ListNode *now = head->next, *pre = head;
    14         while(now){
    15             ListNode *loc = head, *insert = NULL;
    16             while(loc != now && loc->val <= now->val){
    17                 insert = loc;
    18                 loc = loc->next;
    19             }
    20             if(loc != now){
    21                 pre->next = now->next;
    22                 if(insert == NULL){
    23                     now->next = head;
    24                     head = now;
    25                 }
    26                 else{
    27                     now->next = insert->next;
    28                     insert->next = now;
    29                 }
    30             }
    31             else pre = pre->next;
    32             now = pre->next;
    33         }
    34         return head;
    35     }
    36 };
  • 相关阅读:
    (六)静态域,静态方法和静态代码块
    (五)final修饰符
    (四)函数的参数传递——值传递
    (三)java字符串
    第二章 shell的语法
    字符串操作
    PropertyGrid—属性类别排序
    PropertyGrid—为复杂属性提供下拉式编辑框和弹出式编辑框
    PropertyGrid--为复杂属性提供编辑功能
    PropertyGrid—添加EventTab
  • 原文地址:https://www.cnblogs.com/wmx24/p/9492457.html
Copyright © 2011-2022 走看看