用插入排序法对链表进行排序,这种排序算法的时间复杂度为O(n^2)。
public ListNode insertionSortList(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode p1 = head.next; //用于外层循环
ListNode p2 = null; //用于内层循环
ListNode p3 = head; //用于记录p1的前一个节点,便于节点的插入处理
while(p1 != null){
p2 = dummy;
while(p2.next != p1 && p2.next.val <= p1.val){
p2 = p2.next;
}
if(p2.next != p1){
p3.next = p1.next;
p1.next =p2.next;
p2.next = p1;
p1 = p3.next; //注意:如果把p1插入到前面去了,那么p1移动的下一个节点为p3的next,而p3不需前进
}
else{
p1 = p1.next;
p3 = p3.next;
}
}
return dummy.next;
}