算法之排序链表-归并排序

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode sortList(ListNode head) {
        if(head == null || head.next == null) return head;
        return sort (head);
    }
    private ListNode sort(ListNode head) {
        if(head == null || head.next == null) {
            return head;
        }
        ListNode slow =head, fast = head,pre = head;
        while(fast!= null && fast.next!= null) {
            pre = slow;                //非常重要! 需要中点的前一个指针截断
            fast = fast.next.next;
            slow = slow.next;
        }
        pre.next = null;
        ListNode lhead = sort(head);
        ListNode rhead = sort(slow);
        return merge(lhead,rhead);
    }
    private ListNode merge(ListNode lhead, ListNode rhead) {
        ListNode head = new ListNode(0);             //非常重要,需要记录住每次排序后的节点
        ListNode cur = head;
        while(lhead!= null && rhead != null) {
            if(lhead.val <= rhead.val) {
                cur.next = lhead;
                lhead = lhead.next;
            }
            else {
                cur.next = rhead;
                rhead = rhead.next;
            }
            cur = cur.next;
        }
        if(lhead != null)
            cur.next = lhead;
        if(rhead != null)
            cur.next = rhead;
        return head.next;
    }
}
全部评论

相关推荐

字节 飞书绩效团队 (n+2) * 15 + 1k * 12 + 1w
点赞 评论 收藏
分享
牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
11-09 11:01
济南大学 Java
Java抽象带篮子:外卖项目真得美化一下,可以看看我的详细的外卖话术帖子
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务