[牛客经典必刷算法题] 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;
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python进阶(18)@wraps装饰器[通俗易懂]

    python进阶(18)@wraps装饰器[通俗易懂]前言我们都知道装饰器的作用是在不改变原有的代码基础上,添加新的功能,但是这样会有一个弊端,被装饰的函数某些属性会变改变,接下来我们来看下案例importtimedefrun_time(fu

    2022年8月7日
    1
  • 录取为2021年同济大学秋季博士研究生(电子与信息工程学院计算机科学与技术)

    录取为2021年同济大学秋季博士研究生(电子与信息工程学院计算机科学与技术)本来不想回忆往事,读博路上有点坎坷!!遇人不淑,时运不济,还好也遇到一些特别好的老师!同学帮忙。非常感谢这些老师的帮忙。首先是2020年10月份,我硕士生博导朱老师,告诉我他没博士招生名额,但有资格,这个吉大计算机比较特殊,每年博导重新排名,一年一考核,按照分来分博士名额,我老师最后一名,院长副院长有要两个名额的!这里面不方便多说,最后就是我老师今年21招不了博士,到我这卡壳一年,也特别遗憾没能读朱老师的博士。接下来沉沦了两天,10月10号左右吧,开始疯狂联系吉大别的博导,还好联系了几位,其中一z姓老

    2022年7月25日
    26
  • Android程序员的进阶之路

    Android程序员的进阶之路本文主要论述的是android程序员的进阶之路,博主本人就是一名android开发攻城狮,所以这里讲述的大多数是android开发攻城狮的技术进阶之路,如有问题请多指正。大家都知道程序员之中有有菜鸟程序员和大神之分,这里我这暂时把android程序员分为几个层次:android初级程序员、android中级程序员、android高级程序员、android技术专家、CTO等等,不同的级别掌握的能力不

    2022年6月14日
    105
  • .NET控件名称缩写一览表「建议收藏」

    .NET控件名称缩写一览表「建议收藏」.NET控件名称缩写一览表

    2022年4月24日
    40
  • C语言格式输出

    C语言格式输出格式说明由“%”和格式字符组成,如:%d%f等。它的作用是将输出的数据转换成指定的格式输出。格式说明总是由“%”字符开始的。格式字符有:d、o、x、u、c、s、f、e、g等。1、%d整形输出,%ld长整形输出。2、%o以八进制数形式输出整数。3、%x以十六进制形式输出整数,或输出字符串的地址。4、%u以十进制数输出unsigned型整数(无符号数)。注意:%d与%u有无符号数值范围。5、%c用来输出一个字符。6、%s用来输出一个字符串。7、%f用来输出实数,以小数形式输出,默认情况下保留小数

    2022年7月24日
    7
  • Windows server2012密钥_windows 7密钥

    Windows server2012密钥_windows 7密钥WindowsServer2012Standard密钥:NB4WH-BBBYV-3MPPC-9RCMV-46XCBWindowsServer2012StandardCore密钥:NB4WH-BBBYV-3MPPC-9RCMV-46XCBWindowsServer2012Datacenter密钥:BH9T4-4N7CW-67J3M-64J36-WW98YWindowsS

    2022年10月10日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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