Insertion Sort List

题目描述

Sort a linked list using insertion sort.

题目解答

解题思路

插入排序

  • 如果后面的值大于等于前面的值,就继续
  • 如果后面的值小于前面的值,就执行插入动作,插入所需的信息,dummy头结点, cur节点, cur.next 节点, 执行插入的过程要从头开始找大于上述节点的前一个位置。

代码实现

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */
public class Solution {
    /** *插入排序的思想 *但要注意节点的操作 */
    public ListNode insertionSortList(ListNode head){

        if(head == null || head.next == null)
            return head;

        ListNode dummy = new ListNode(Integer.MIN_VALUE);
        dummy.next  = head;
        ListNode cur = dummy;
        while(cur.next != null){
            if(cur.next.val >= cur.val) {
                cur = cur.next;
            }else {
                cur = insert(dummy, cur, cur.next);
            }
        }

        return dummy.next;
    }

    /** *执行插入过程 *要找到大于node值的前一个节点 */
    public ListNode insert(ListNode head, ListNode tail, ListNode node){

        ListNode cur = head;
        //稳定的排序 <=
        while(cur.next.val <= node.val)
            cur = cur.next;
        //注意顺序
        tail.next = node.next;
        node.next = cur.next;
        cur.next = node;

        return tail;
    }
}

你可能感兴趣的:(插入排序)