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

[牛客经典必刷算法题] 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;// 取出当前节点currListNode curr = head.next;//保存下一节点head.next = curr.next;// 插入操作curr.next = pre.next;pre.next = curr;}return dummy.next;}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部