• LeetCode | Insertion Sort List


    题目:Sort a linked list using insertion sort.

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) {
     *         val = x;
     *         next = null;
     *     }
     * }
     */

    //插入排序,每次把A[p]插入到正确的位置
    public class Solution {
        public ListNode insertionSortList(ListNode head) {
            if ( head==null || head.next==null ) return head; 
            ListNode newHead = new ListNode(0);
            newHead.next = head;
            
            ListNode pre = head;          //取例: 4 8 3 1 5
            ListNode post = head.next;   //pre和post用来向后遍历list,查找是否有逆序的存在
            
            while( post != null){
                if( post.val >= pre.val )  //正常情况(4<8),继续向后前进查找逆序
                {
                    pre = pre.next;
                    post = post.next;
                }
                else{                     //说明查找到了逆序的存在(8>3),要利用插入排序,把post<插入>到正确的位置
                    ListNode insertPre = newHead;
                    ListNode insertPost = newHead.next;  //这两个变量用来查找插入的位置,插入到insertPre与insertPost之间
                    
                    while( insertPost.val < post.val ){     //查找插入位置,插入位置应该在List中第一个大于A[p]之前,例如3要插入到4之前
                                                            //第一个大于A[p]的位置即insertPost
                                                            //注:插入A[p]时,其左边已处于排序好的状态
                         insertPre = insertPost;
                         insertPost = insertPost.next;
                    }
                    pre.next = post.next;  //在把post插入到正确位置之前,要记得把pre和后边的list接上,把8和1连上
                    
                    insertPre.next = post;
                    post.next = insertPost;  //此两行即把post插入到正确的位置
                    
                    post = pre.next;    //在进行下一次循环前,重新把post置为pre的下一个
                }
            }
           return newHead.next;
        }
    }
    
  • 相关阅读:
    apt update ,apt upgrade 和 apt dist-upgrade 的区别
    CVE-2018-8639 简单利用 win7
    如何拆解性能测试需求
    博客搬家啦
    驱动开发学习一
    驱动开发基础之数据结构
    c++容器加迭代器和python装饰器的对比
    c++简单学习
    windows下z3安装
    switch反汇编
  • 原文地址:https://www.cnblogs.com/dosmile/p/6444486.html
Copyright © 2020-2023  润新知