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;
    }
}

 

posted @ 2020-12-17 21:02  不学无墅_NKer  阅读(72)  评论(0编辑  收藏  举报