前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[牛客经典必刷算法题] LC5-链表的插入排序

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

作者头像
全栈程序员站长
发布2022-09-15 10:37:11
2240
发布2022-09-15 10:37:11
举报
文章被收录于专栏:全栈程序员必看

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

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

本题链接

题目描述

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

示例

代码语言:javascript
复制
输入
{30,20,40}
 
返回值
{20,30,40}

思路

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

插入排序算法描述:

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

解答

代码语言:javascript
复制
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.cn/164024.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • [牛客经典必刷算法题] LC5-链表的插入排序
  • 题目描述
  • 示例
  • 思路
  • 解答
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档