对链表进行插入排序

对链表进行插入排序

题目:
示例 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;
    }
}
原文地址:https://www.cnblogs.com/katoMegumi/p/14009819.html