首页 > 其他 > 详细

LeetCode 148:Sort List

时间:2020-05-13 23:32:18      阅读:51      评论:0      收藏:0      [点我收藏+]

题意描述

对一个链表进行排序

测试用例

Input: 4->2->1->3

Output: 1->2->3->4

Input: -1->5->3->4->0

Output: -1->0->3->4->5

解题思路

一、思路一

  1. 将链表进行拆分,最终向下拆分成一个节点为单位的链表
  2. 比较节点的val大小,重新进行拼接
  3. 每次拼接完成,返回新链表的头节点,进行下一轮拼接
    public ListNode sortList(ListNode head) {
            if(head == null || head.next == null) return head;
            ListNode slow = head,fast = head,pre = null;
        	//将链表分为两部分
            while(fast != null && fast.next != null){
                pre = slow;
                slow = slow.next;
                fast = fast.next.next;
            }
            pre.next = null;
            ListNode l1 = sortList(head);	//左边向下拆分
            ListNode l2 = sortList(slow);	//右边向下拆分
            return merge(l1, l2);	//拼接节点
        }
        private ListNode merge(ListNode node1,ListNode node2){
            ListNode node = new ListNode(-1);
            ListNode head = node;
            while(node1 != null && node2 != null){
                if(node1.val < node2.val){
                    head.next = node1;
                    node1 = node1.next;
                }else{
                    head.next = node2;
                    node2 = node2.next;
                }
                head = head.next;
            }
            if(node1 != null){
                head.next = node1;
            }
            if(node2 != null){
                head.next = node2;
            }
            return node.next;
        }

LeetCode 148:Sort List

原文:https://www.cnblogs.com/le-le/p/12885384.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!