zoukankan      html  css  js  c++  java
  • 147. Insertion Sort List

    一、题目

      1、审题

      

      2、分析

        给出一个链表,采用插入排序的方式将节点进行排序。

    二、解答

      1、思路:

        方法一、

          ①、将第一个节点结点作为新的有序链表的开始。指针 node 指向 head, next 指向 head 的下一个元素。

          ②、将 next 值依次与 node 所指链表节点进行比较,并插入合适位置。

          ③、next 依次向后移动,直到所有节点全部插入 node 所指链表,即 next 为 空。

        public ListNode insertionSortList(ListNode head) {
            if(head == null)
                return head;
            
            ListNode node = head;
            ListNode next = head.next;
            node.next = null;
            
            while(next != null) {
                ListNode pre = node;
                ListNode cur = node.next;
                // next 值比头节点还小
                if(pre.val >= next.val) {
                    ListNode tmp = next.next;
                    next.next = pre;
                    node = next;
                    next = tmp;
                }
                // next 值比头结点大,找到合适位置插入
                else {
                    while(cur  != null && cur.val < next.val) {
                        pre = cur;
                        cur = cur.next;
                    }
                    pre.next = next;
                    next = next.next;
                    pre.next.next = cur;
                }
            }
            return head;
        }

        方法二、

          新建一个头节点,在头结点中依次插入预原 List 中的节点。 

        public ListNode insertionSortList(ListNode head) {
            if(head == null)
                return head;
            
            ListNode helper = new ListNode(0);
            ListNode cur = head;
            ListNode pre = helper;
            ListNode next = null;
            
            while(cur != null) {
                next = cur.next;
                //find the right place to insert
                while(pre.next != null && pre.next.val < cur.val) 
                    pre = pre.next;
                
                //insert between pre and pre.next
                cur.next = pre.next;
                pre.next = cur;
                pre = helper;
                cur = next;
            }
            return helper.next;
        }
  • 相关阅读:
    CodeForces
    CodeForces
    Simple Robot Gym
    Gym
    Java课程03总结
    Java课程03总结
    判断字符串是否回文
    Java课程02总结
    有关二进制原码、反码、补码
    Java课程01总结
  • 原文地址:https://www.cnblogs.com/skillking/p/9779528.html
Copyright © 2011-2022 走看看