Sort a linked list using insertion sort.
題意:用插入排序的方法排序一個鏈表。
思路:
重啟一個頭結點指向新鏈表。
遍歷待排序的鏈表,對每個帶排序的節點a,在新鏈表中找第一個比a大的節點b。
-
將a插入到新鏈表,需要借助一個輔助指針pre。
public ListNode insertionSortList(ListNode head) { if (head == null) { return null; } ListNode newHead = new ListNode(0); ListNode node = head; while (node != null) { ListNode newNode = new ListNode(node.val); if (newHead.next == null) { newHead.next = newNode; } else { //find first bigger ListNode pre = newHead; ListNode dummy = newHead.next; while (dummy != null && dummy.val < node.val) { pre = pre.next; dummy = dummy.next; } //insert pre.next = newNode; newNode.next = dummy; } node = node.next; } return newHead.next; }