LeetCode147. 對連結串列進行插入排序
阿新 • • 發佈:2020-12-17
☆☆☆思路:關鍵點是每次從前往後尋找插入位置。
class Solution { /** * 每次拿出未排序的節點,先和前驅比較,如果大於或者等於前驅,就不用排序了,直接進入下一次迴圈 * 如果前驅小,則進入內層迴圈,每次從頭開始比較,插入對應位置即可。 */ public ListNode insertionSortList(ListNode head) { if (head == null || head.next == null) return head; ListNode dummyHead = newListNode(-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; } }