对链表进行插入排序
题目:
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5
解题思路:需要维护几个引用来记录当前已排序的和正在排序的节点,当找到大于当前要排序的节点值后进行插入操作
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode insertionSortList(ListNode head) {
if(head == null)
return null;
if(head.next == null)
return head;
ListNode root = new ListNode(0);
root.next = head;
ListNode p = root.next;
ListNode next = p.next;
while(next != null) {
System.out.println(p == null);
if(p.val <= next.val) {
p = p.next;
next = p.next;
continue ;
}
ListNode pr = root;
while(pr.next.val <= next.val) {
pr = pr.next;
}
p.next = next.next;
next.next = pr.next;
pr.next = next;
next = p.next;
}
return root.next;
}
}