题目描述:
Sort a linked list using insertion sort.
意思就是用插入排序对一个链表进行排序。
插入排序的思想:与斗地主整理手牌的顺序的方法非常类似,例如, 前 i 个数组成了一个排序后的序列, 当插入第 i + 1 个数的时候, 只需要遍历这个数组找到新元素应该插入的位置, 就可以实现插入排序。
public ListNode insertionSortList(ListNode head) {
if(head == null){
return null;
}
ListNode sortLNode = head;
//分段,分成已经排序的部分和未排序的部分
ListNode node = head.next;
head.next = null;
while(node != null){
ListNode insertNode = node;
node = node.next;
sortLNode = insertNodeToSortedLNode(sortLNode, insertNode);
}
return sortLNode;
}
//将一个结点插入到排序好的链表中
public static ListNode insertNodeToSortedLNode(ListNode head, ListNode node) {
ListNode sortedHead = head;
ListNode pre = head;
ListNode cur = head.next;
if(node.val < pre.val){
node.next = pre;
sortedHead = node;
}
else{
while(cur != null && cur.val < node.val){
pre = pre.next;
cur = cur.next;
}
pre.next = node;
node.next = cur;
}
return sortedHead;
}