1. 程式人生 > 實用技巧 >LeetCode147. 對連結串列進行插入排序

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