import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类 the head node
* @return ListNode类
*/
public ListNode sortInList (ListNode head) {
// 寻找最小的元素,并利用头插法插入到节点
ListNode dummy = new ListNode(Integer.MAX_VALUE);
dummy.next = head;
ListNode sorted = dummy;
while (sorted.next != null) {
ListNode pre = sorted;
ListNode cur = sorted.next;
ListNode pre_min = null;
ListNode min = null;
// 寻找最小的数
while (cur != null) {
if (min == null || cur.val < min.val) {
min = cur;
pre_min = pre;
}
// 继续向后移动指针
cur = cur.next;
pre = pre.next;
}
// 利用头插法插入
pre_min.next = min.next;
min.next = sorted.next;
sorted.next = min;
// 哨兵节点往后移动
sorted = min;
}
return dummy.next;
}
}