(leetcode)連結串列的插入排序
阿新 • • 發佈:2018-12-19
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的下一個位置