插入排序
对链表进行插入排序,是最简单的一种链表排序算法,用于插入排序是迭代的,所以每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。
插入排序的时间复杂度为O(N^2),空间复杂度为O(1)
class Solution {
public ListNode insertionSortList(ListNode head) {
ListNode move=head;
ListNode emptyHead=new ListNode();
emptyHead.next=head;
while(move!=null&&move.next!=null){
if(!reInsert(move,emptyHead))
move=move.next;
}
return emptyHead.next;
}
private Boolean reInsert(ListNode node,ListNode emptyHead){
ListNode temp=node.next;
node.next=temp.next;
while(emptyHead!= node){
if(temp.val<=emptyHead.next.val){
temp.next=emptyHead.next;
emptyHead.next=temp;
return true;
}
emptyHead=emptyHead.next;
}
temp.next