博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
148. Sort List
阅读量:5248 次
发布时间:2019-06-14

本文共 1210 字,大约阅读时间需要 4 分钟。

Sort a linked list in O(n log n) time using constant space complexity.

Merge Sort.

/**

* Definition for singly-linked list.
* class ListNode {
*    int val;
*    ListNode next;
*    ListNode(int x) {
*       val = x;
*      next = null;
*    }
* }
*/

public class SortList {

    public ListNode sortList(ListNode head) {

        if (head == null || head.next == null) {

            return head;

        }

        ListNode[] splits = split(head);

        ListNode left = sortList(splits[0]);

        ListNode right = sortList(splits[1]);

        return merge(left, right);

    }

    

    private ListNode[] split(ListNode head) {

        ListNode fast = head;

        ListNode slow = head;

        while (fast != null && fast.next != null) {

            fast = fast.next.next;

            if (fast == null) {

                break;

            }

            slow = slow.next;

        }

        fast = slow.next;

        slow.next = null;

        return new ListNode[]{

head, fast};

    }

    

    private ListNode merge(ListNode head1, ListNode head2) {

        ListNode head = new ListNode(0);

        ListNode tmp = head;

        while (head1 != null && head2 != null) {

            if (head1.val < head2.val) {

                tmp.next = head1;

                head1 = head1.next;

            } else {

                tmp.next = head2;

                head2 = head2.next;

            }

            tmp = tmp.next;

        }

        if (head1 != null) {

            tmp.next = head1;

        } else {

            tmp.next = head2;

        }

        return head.next;

    }

}

转载于:https://www.cnblogs.com/shini/p/4430884.html

你可能感兴趣的文章
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
P1107 最大整数
查看>>
多进程与多线程的区别
查看>>
Ubuntu(虚拟机)下安装Qt5.5.1
查看>>
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
查看>>
java 常用命令
查看>>
CodeForces Round #545 Div.2
查看>>
卷积中的参数
查看>>
51nod1076 (边双连通)
查看>>
Item 9: Avoid Conversion Operators in Your APIs(Effective C#)
查看>>
深入浅出JavaScript(2)—ECMAScript
查看>>
STEP2——《数据分析:企业的贤内助》重点摘要笔记(六)——数据描述
查看>>
ViewPager的onPageChangeListener里面的一些方法参数:
查看>>
Jenkins关闭、重启,Jenkins服务的启动、停止方法。
查看>>
CF E2 - Array and Segments (Hard version) (线段树)
查看>>
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
查看>>
SIGPIPE并产生一个信号处理
查看>>
CentOS
查看>>
Linux pipe函数
查看>>