沫沫的进阶之路

记录点滴

[Leetcode] 148. Sort List

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

思路:把两个已有顺序链表的合并想法。

具体代码:

public ListNode sortList(ListNode head) {
        if(head == null || head.next == null){
            return head;
        }

        ListNode p = head;
        ListNode end = head.next.next;

        while(end != null && end.next != null){
            p = p.next;
            end = end.next.next;
        }

        ListNode p2 = sortList(p.next);

        p.next = null;

        ListNode p1 = sortList(head);


        return MegerList(p1,p2);
    }

//  对两个已排序的链表进行合并
    public ListNode MegerList(ListNode head1,ListNode head2){
        ListNode phead = new ListNode(Integer.MIN_VALUE);
        ListNode p = phead;

        while(head1 != null && head2 != null){
            if(head1.val < head2.val){
                p.next = head1;
                head1 =head1.next;
            }
            else{
                p.next = head2;
                head2 =head2.next;
            }
            p = p.next;
        }

        if(head1 != null){
            p.next = head1;
        }
        if(head2 != null){
            p.next = head2;
        }

        return phead.next;
    }
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xinyuehuixin/article/details/51563985
个人分类: Leetcode
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭