147. 對連結串列進行插入排序

dtzly發表於2020-11-22

思路

思路很簡單:連結串列insert+插入排序。主要在於考察程式設計基本功,雷弟說指著指著就指到姥姥家了。。。

  • 設定啞節點便於操作頭指標,newbie可以參考這篇博文,pre指標每次從頭遍歷,和待插入元素比較大小,小於則一直往後直到找出下一個節點大於待查節點的元素即插入點
  • 連結串列插入,解釋略
  • pre,cur返回現場,繼續任務。

程式碼

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode insertionSortList(ListNode head) {
        if(head==null) return null;
        ListNode dummy = new ListNode(-1);
        //cur用來遍歷原始連結串列
        ListNode cur = head;
        //pre用來記錄待插元素的前一個節點
        ListNode pre = dummy;
        while(cur!=null){
            //遍歷新連結串列,若節點元素小於待插入元素則繼續,直到找到應插之處的前面一個節點
           while(pre.next!=null&&pre.next.val<cur.val) pre = pre.next;
           //插入
           ListNode save = cur.next;
           cur.next = pre.next;
           pre.next = cur;
           //因為每次pre都要從頭比較待插元素
           pre=dummy;
           //cur繼續遍歷,斷了的線繼續連QAQ
           cur=save  ;
        }
        return dummy.next;
    }
}

相關文章