public class Solution {
public ListNode insertionSortList(ListNode head) {
ListNode dummy = new ListNode(Integer.MIN_VALUE); //新建一个链表头,用来保存已经排序好的链表
//cur指针,用于指向当前需要处理的结点
ListNode cur = head;
//pre指针,用于遍历已经排序好的结点
ListNode pre = dummy;
//开始遍历链表
while (cur!=null){
//pre指针一开始一定指向dummy
pre = dummy;
//用next指针指向当前结点的下一个结点
ListNode next = cur.next;
//在已经排序好的链表中进行遍历,pre最后找到了比cur当前值小的最大值
while (pre.next != null && pre.next.val<cur.val){
pre = pre.next;
}
//那么就需要把cur指向的结点插入到pre和pre.next之间
cur.next = pre.next;
pre.next = cur;
//处理完当前结点,需要往后移动了
cur = next;
}
return dummy.next;
}
}
思路就是用dummy拉起一条已经排好序的链表,将要处理的结点的值和排序的链表比对,找到合适位置插入,打断的链表用next指针定位cur的下一个位置