1. 程式人生 > >(leetcode)連結串列的插入排序

(leetcode)連結串列的插入排序

public class Solution {
      public ListNode insertionSortList(ListNode head) {
          ListNode dummy = new ListNode(Integer.MIN_VALUE); //新建一個連結串列頭,用來儲存已經排序好的連結串列
         //cur指標,用於指向當前需要處理的結點
          ListNode cur = head;
         //pre指標,用於遍歷已經排序好的結點
          ListNode pre = dummy;
          //開始遍歷連結串列
          while (cur!=null){
              //pre指標一開始一定指向dummy
              pre = dummy;
             //用next指標指向當前結點的下一個結點
              ListNode next = cur.next;
              //在已經排序好的連結串列中進行遍歷,pre最後找到了比cur當前值小的最大值
              while (pre.next != null && pre.next.val<cur.val){
                  pre = pre.next;
              }
              //那麼就需要把cur指向的結點插入到pre和pre.next之間
              cur.next = pre.next;
              pre.next = cur;
              //處理完當前結點,需要往後移動了
              cur = next;
          }
          return dummy.next;
      }
}

思路就是用dummy拉起一條已經排好序的連結串列,將要處理的結點的值和排序的連結串列比對,找到合適位置插入,打斷的連結串列用next指標定位cur的下一個位置