使用插入排序对链表排序。
插入排序就是不断的向一个已经排序的列表中(此处为代码中的sortedList)添加新的节点,并且保证添加节点后的列表仍然有序。
这里用把排好序的头节点为head,未排序的为last
每次排序让h=head
hl = head的前一个节点
让last与h对比大小
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode insertionSortList(ListNode head) {
if(head==null || head.next==null) return head;
ListNode last = head.next;//待排序的链表
head.next = null;//一个已经排序好的链表
while(last!=null){//待插入的链表节点
ListNode h = head;
ListNode hl = null;
while(h!=null && last.val > h.val){
hl = h;
h = h.next;
}
ListNode cur =last.next;
if(h==head){//说明cur比head小,直接插入head前面
last.next = h;
head = last;
}
else{//说明cur比head大,直接插入head后面
hl.next = last;
last.next = h;
}
last = cur;
}
return head;
}
}