[牛客经典必刷算法题] LC5-链表的插入排序

[牛客经典必刷算法题] LC5-链表的插入排序牛客经典笔刷算法题-LC5-链表的插入排序题目描述示例思路解答本题链接题目描述使用插入排序对链表进行排序。示例输入{30,20,40}返回值{20,30,40}思路通过虚拟头节点处理链表排序插入排序算法描述:步骤一:从第一个元素开始,该元素可以认为已经被排序;步骤二:取出下一个元素,在已经排序的元素序列中从后向前扫描;步骤三:如果该元素(已排序)大于新元素,将该元素移到下一位置;步骤四:重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;步骤五:将新元素插

大家好,又见面了,我是你们的朋友全栈君。

[牛客经典必刷算法题] LC5-链表的插入排序

本题链接

题目描述

使用插入排序对链表进行排序。

示例

输入
{30,20,40}
 
返回值
{20,30,40}

思路

通过虚拟头节点处理链表排序

插入排序算法描述:

  • 步骤一:从第一个元素开始,该元素可以认为已经被排序;
  • 步骤二:取出下一个元素,在已经排序的元素序列中从后向前扫描;
  • 步骤三:如果该元素(已排序)大于新元素,将该元素移到下一位置;
  • 步骤四:重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
  • 步骤五:将新元素插入到该位置后;
  • 步骤六:重复步骤二~五

解答

import java.util.*;

/* * public class ListNode { * int val; * ListNode next = null; * } */

public class Solution { 
   
    /** * * @param head ListNode类 * @return ListNode类 */
    public ListNode insertionSortList (ListNode head) { 
   
        if(head == null || head.next == null) return head;
        // 虚节点
        ListNode dummy = new ListNode(-1), pre;
        dummy.next = head;
        
        while(head != null && head.next != null){ 
   
            // 如果小于下一节点,直接跳过,加速排序
            if(head.val <= head.next.val){ 
   
                head = head.next;
                continue;
            }
            
            // 寻找当前节点正确位置
            pre = dummy;
            while(pre.next.val < head.next.val) pre = pre.next;
            // 取出当前节点curr
            ListNode curr = head.next;
            //保存下一节点
            head.next = curr.next;
            // 插入操作
            curr.next = pre.next;
            pre.next = curr;
        }
        return dummy.next;
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/164024.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 解决 无法解析名称 NaiveBayes.fit。/i get Undefined variable “NaiveBayes“ or class “NaiveBayes.fit“.

    解决 无法解析名称 NaiveBayes.fit。/i get Undefined variable “NaiveBayes“ or class “NaiveBayes.fit“.应用朴素贝叶斯分类器时候,发现报错无法解析名称NaiveBayes.fit这是因为你想用NaiveBayes。适用于MATLABR2018b。根据NaiveBayes的R2014b发布说明,fit被fitNaiveBayes取代:同时根据R2018a发布说明fitNaiveBayes被fitcnb取代。因此,使用fitcnb即可。将NaiveBayes.fit改为fitcnb就好啦!!!参考链接:链接:点击这里.打个小广告啊啊啊打个小广告,欢迎关注我的公众号“麦香E站”,分

  • 利用Redis实现高并发计数器

    利用Redis实现高并发计数器业务需求中经常有需要用到计数器的场景:譬如一个手机号一天限制发送5条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等。使用Redis的Incr自增命令可以轻松实现以上需求。以一个接口一天限制调用次数为例: /** *是否拒绝服务 *@return */ privatebooleandenialOfService(StringuserId){ longc…

  • Oracle ORA-01017 报错处理

    Oracle ORA-01017 报错处理Oracle ORA-01017报错处理背景: 通过toad连接Oracle11gRAC数据库是,发现通过sys用户连接总是报ORA-01017错误,tnsping连接名称是通的,其他用户连接是正常的,反复输入sys账户信息,总提示:1.尝试改sys用户密码,重试报错依旧。 2.使用sys登录GC,报错相同。使用普通用户登录正常。 3.数据库服务器上使用sqlplus

  • eclipse修改工程文件编码

    eclipse修改工程文件编码eclipse修改工程文件编码

  • Android studio安装教程[通俗易懂]

    Android studio安装教程[通俗易懂]Androidstudio安装教程傻瓜式教程如果想要彻底重装Androidstudio可以删除目录C:\Users\用户名中的以下几个文件夹。.android.gradle.Androidstudio(Androidstudio4.0版本之前才有)隐藏文件夹(Androidstudio4.0版本后才有)C:\Users\用户名\AppData\Roaming\Google\AndroidStudio4.1C:\Users\用户名\AppData\Local\Google\A

  • Jquery选中的radio行变色

    Jquery选中的radio行变色

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号