原题链接在这里:https://leetcode.com/problems/insertion-sort-list/
思路:设置cur = head,判断cur.val 和 cur.next.val 大小关系,若是后者小, 就从头往后扫值,一直到有一点的val大于cur.next.val, 然后把cur.next这个点加在那里。
与Sort List属于同一类型。
Note: 1. 有可能会更改head,所以加一个dummy head来辅助需要更改头结点的情况。
2. 每次加完点后要记得要把mark更改回dummy点。
AC Java:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode insertionSortList(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode cur = head;
ListNode mark = dummy;
while(cur.next != null){
if(cur.val > cur.next.val){
while(mark.next.val<=cur.next.val){
mark = mark.next;
}
ListNode temp = cur.next;
cur.next = cur.next.next;
temp.next = mark.next;
mark.next = temp;
mark = dummy;
}else{
cur = cur.next;
}
}
return dummy.next;
}
}