import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
* 需要使用插入排序,
1.创建头节点为虚节点,将虚节点指针指向原头节点
2.循环 从原头节点第二个node开始 往前 判断,是否存在比该节点大得数据,存在则交换指针,
3.每循环一次,都需要将记录下次需要遍历node得引用,
* @param head ListNode类
* @return ListNode类
*/
public ListNode insertionSortList (ListNode head) {
if(head==null||head.next==null)return head;
//创建头节点
ListNode tempNode =new ListNode(0);
//连接指针
tempNode.next=head;
//从第二个节点开始遍历是否需要插入
ListNode current =head.next;
//设置引用对象,交换指针得时候需要有 3个节点得指针变动,
//pre节点得next指向currentNode,
//currentNode得上一节点得next需要指向currentNode得next
//currentNode得next指向pre节点得next
//如果需要指针变动,则会把当前节点插入到前面,所以currentLast指针不用变动,
//如果不需要指针变动,则下次循环得时候currentLast指针为currentLast得next节点
ListNode next,pre,currentLast=head;
while (true){
pre=tempNode;
if(current==null)break;
next=current.next;
while (pre.next.val<current.val){
pre=pre.next;
}
if(pre.next!=current){
//交换 1,2,3,4,
currentLast.next = next;
current.next =pre.next;
pre.next = current;
}else{
currentLast = current;
}
current=next;
}
return tempNode.next;
}
}