147.对链表进行插入排序
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode insertionSortList(ListNode head) {
if(head == null){
return null;
}
ListNode dumyNode = new ListNode(0);
dumyNode.next = head;
//记录已经完成排序的结点末尾
ListNode lastSorted = head;
//当前需要更新插入的结点
ListNode current = head.next;
while(current!=null){
if(lastSorted.val <= current.val){
//新插入的值正好是最大值
lastSorted = lastSorted.next;
}else{
//从头开始寻找插入的位置
ListNode pre = dumyNode;
while(pre.next.val <= current.val){
pre = pre.next;
}
//将新结点插入到链表
lastSorted.next = current.next;
current.next = pre.next;
pre.next = current;
}
//更新新结点
current = lastSorted.next;
}
return dumyNode.next;
}
}