題目:
Sort a linked list using insertion sort.
題解:
Insertion Sort就是把一個一個元素往已排好序的list中插入的過程。
初始時,sorted list是空,把一個元素插入sorted list中。然後,在每一次插入過程中,都是找到最合適位置進行插入。
因為是連結串列的插入操作,需要維護pre,cur和next3個指標。
pre始終指向sorted list的fakehead,cur指向當前需要被插入的元素,next指向下一個需要被插入的元素。
當sortedlist為空以及pre.next所指向的元素比cur指向的元素值要大時,需要把cur元素插入到pre.next所指向元素之前。否則,pre指標後移。最後返回fakehead的next即可。
程式碼如下:
1 public ListNode insertionSortList(ListNode head) {
2 if(head == null||head.next == null)
3 return head;
4 ListNode sortedlisthead = new ListNode(0);
5 ListNode cur = head;
6 while(cur!=null){
7 ListNode next = cur.next;
8 ListNode pre = sortedlisthead;
9 while(pre.next!=null && pre.next.val<cur.val)
10 pre = pre.next;
11 cur.next = pre.next;
12 pre.next = cur;
13 cur = next;
14 }
15 return sortedlisthead.next;
16 }
2 if(head == null||head.next == null)
3 return head;
4 ListNode sortedlisthead = new ListNode(0);
5 ListNode cur = head;
6 while(cur!=null){
7 ListNode next = cur.next;
8 ListNode pre = sortedlisthead;
9 while(pre.next!=null && pre.next.val<cur.val)
10 pre = pre.next;
11 cur.next = pre.next;
12 pre.next = cur;
13 cur = next;
14 }
15 return sortedlisthead.next;
16 }