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


    ☆☆☆思路:关键点是每次从前往后寻找插入位置。

    class Solution {
        /**
         *  每次拿出未排序的节点,先和前驱比较,如果大于或者等于前驱,就不用排序了,直接进入下一次循环
         *  如果前驱小,则进入内层循环,每次从头开始比较,插入对应位置即可。
         */
        public ListNode insertionSortList(ListNode head) {
            if (head == null || head.next == null) return head;
            ListNode dummyHead = new ListNode(-1);
            dummyHead.next = head;
            ListNode pre = head, cur = head.next;
            while (cur != null) {
                if (cur.val >= pre.val) {
                    pre = cur;
                    cur = cur.next;
                    continue;
                }
                ListNode p = dummyHead;
                while (p.next.val <= cur.val) {
                    p = p.next;
                }
                pre.next = cur.next;
                // 把 cur 插在 p 和 p.next 之间
                cur.next = p.next;
                p.next = cur;
                cur = pre.next;
            }
            return dummyHead.next;
        }
    }
  • 相关阅读:
    最大流之dinic
    HDU 2485
    最小费用最大流
    HDU 1533
    HDU 1402
    HDU 1498
    HDU 1281
    Codeforces 283E Cow Tennis Tournament 线段树 (看题解)
    Codeforces 983E NN country 思维 (看题解)
    Codeforces 494D Birthday 树形dp (看题解)
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14134309.html
Copyright © 2020-2023  润新知