[LintCode] Insertion Sort List

news/2024/7/3 10:46:10 标签: 数据结构与算法

Problem

Sort a linked list using insertion sort.

Example

Given 1->3->2->0->null, return 0->1->2->3->null.

Note

插入排序【维基百科】

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

  1. 从第一个元素开始,该元素可以认为已经被排序

  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描

  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置

  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

  5. 将新元素插入到该位置后

  6. 重复步骤2~5

关于插入排序,我所知道的就是从头部开始,将每个数放到合适的位置。在放这个数之前,这个数的目标位置和原始位置之间的数都要先进行后移。然而这是一个in-place的操作,而对于链表而言,我们只要做一个空链表,然后不断加入原链表中的最小元素即可。
cur是原链表head的指针,不断向后扫描;node是空链表dummy的指针,用node.nextcur所指向的结点进行比较,一旦发现排列好的新链表中有大于cur的结点,就把cur放在node.next,然后进行下一轮循环:cur.next作为原链表新的curnode返回新链表起点dummy。最后,当cur = null,即遍历完整个原链表之后,新链表排序完成。返回dummy.next即可。

Solution

public class Solution {
    public ListNode insertionSortList(ListNode head) {
        ListNode dummy = new ListNode(0);
        ListNode cur = head;
        while (cur != null) {
            ListNode node = dummy;
            while (node.next != null && node.next.val < cur.val) node = node.next;
            ListNode temp = cur.next;
            cur.next = node.next;
            node.next = cur;
            cur = temp;
        }
        return dummy.next;
    }
}

http://www.niftyadmin.cn/n/1413543.html

相关文章

Balanced Lineup(线段树求最大值,最小值)

For the daily milking, Farmer John’s N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer John decides to organize a game of Ultimate Frisbee with some of the cows. To keep things simple, he will take a contiguous range of cows from …

架构,构件,组件,框架,中间件之间区别

中间件是一种独立的系统软件或服务程序&#xff0c;分布式应用软件借助这种软件在不同的技术之间共享资源&#xff1b;Web Services就是可以通过web描述、发布、定位和调用的模块化应用&#xff1b;组件就是对象&#xff1b;模式&#xff0c;即pattern。其实就是解决某一类问题…

css开发素材网址

1、border-collapse 为表格设置合并边框模型 2、border-spacing border-spacing 属性设置相邻单元格的边框间的距离 backface-visibility:hidden; 隐藏被旋转的 div 元素的背面 m.dx.com http://www.365mini.com/page/jquery-resize.htmjQuery 中文手册网址 W3CPluscss3 htt…

ASP.NET MVC + jQuery + Newtonsoft.Json 快樂的AJAX

這是目前我的方案&#xff0c;個人覺得還蠻輕巧自在的。 Controller負責把要輸出的資料序列成json。 Html.ActionUrl 這隻method原來的MVC Toolkit沒有&#xff0c;我隨手加的。 我 是用Newtonsoft.Json作物件序列成JSON&#xff0c;那為什麼不用MS Ajax內建的 System.Web.Sc…

菱形继承与菱形虚拟继承

“菱形继承与菱形虚拟继承” “继承”是c面向对象语言的特点之一&#xff0c;对于一个类&#xff0c;我们如果想对这个类的功能进行扩充&#xff0c;这就可以通过"继承"的方式重新增添或删除这个类中的某些功能。C语言支持单继承和多继承&#xff0c;如果不大清楚单…

微調一下 Json.net ,讓他可以序列基本型別

因為 Json.net 是有附原始碼的&#xff0c;他也附了單元測試的專案&#xff0c;底下是我額外增加的UnitTest&#xff0c;我的目標就是讓底下的測試可以pass&#xff0c;而且原來的Test 也要都能通過。 ValueTypeTest.cs using System;using NUnit.Framework;namespace Newtons…

.Net 底下,Json 相關套件的限制

Json.Net 無法序列基本型別(string, int)&#xff0c;Asp.Net Ajax 無法正確序列日期&#xff0c;AjaxPro序列出我不想要的_type字串 1. Json.Net 是我最常使用的序列/反序列json套件&#xff0c;標榜速度快&#xff0c;對於一對多關係的object 也都能正常運作, 己能滿足我平日…

SpringBoot开发案例之打造私有云网盘

前言 最近在做工作流的事情&#xff0c;正好有个需求&#xff0c;要添加一个附件上传的功能&#xff0c;曾找过不少上传插件&#xff0c;都不是特别满意。无意中发现一个很好用的开源web文件管理器插件 elfinder&#xff0c;功能比较完善&#xff0c;社区也很活跃&#xff0c;还…