• 147. 对链表进行插入排序


    147. 对链表进行插入排序

    思路:

      与数组插入排序的思路相同,都是先有一个有序序列,然后拿着待插入元素,在有序序列中找到正确的位置;

      链表有序序列的初始化方式就是,先定义一个哨兵dummyNode,然后让head节点成为第一个有序的序列的元素,维护一个lastSortNode保存有序序列的最后一个元素。

      其实就相当于从第一个元素开始每次拿有序序列的后边一个元素,放到正确的位置上,最后让所有的链表都有序了。

    https://leetcode-cn.com/problems/insertion-sort-list/solution/dui-lian-biao-jin-xing-cha-ru-pai-xu-by-leetcode-s/

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        public ListNode insertionSortList(ListNode head) {
            ListNode dummyHead = new ListNode(0);
            dummyHead.next = head;
            ListNode lastSorted = head;
            ListNode cur = head.next;
            while (cur != null) {
                if (lastSorted.val < cur.val) {
                    lastSorted = lastSorted.next;
                } else {
                    // 从前往后找到合适的位置,将cur元素插入到链表中
                    ListNode pre = dummyHead;
                    while (cur.val > pre.next.val) {
                        pre = pre.next;
                    }
                    // 将cur从原来的链表中删除
                    lastSorted.next = cur.next;
                    // 将cur添加到新排序链表中
                    cur.next = pre.next;
                    pre.next = cur;
                }
                cur = lastSorted.next;
            }
            return dummyHead.next;
        }
    }

    。。

  • 相关阅读:
    堆和栈的区别
    熟悉熟悉常用的几个算法用JS的实现
    JS设置CSS样式的几种方式
    javascript的基本语法、数据结构
    DOM的概念及子节点类型
    三列自适应布局
    Javascript中括号“[]”的多义性
    Javascript中大括号“{}”的多义性
    Javascript小括号“()”的多义性
    JavaScript 开发者经常忽略或误用的七个基础知识点
  • 原文地址:https://www.cnblogs.com/guoyu1/p/15742965.html
Copyright © 2020-2023  润新知