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; } }