题解 | #单链表的排序#

单链表的排序

http://www.nowcoder.com/practice/f23604257af94d939848729b1a5cda08

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 the head node
     * @return ListNode类
     * @method 单链表切分为两个链表,再排序,再合并有序链表
     */
    public ListNode sortInList (ListNode head) {
        if (head == null || head.next == null)
            return head;
        // write code here
        // 1. 切分链表
        ListNode slow = head , fast = head.next;
        while(fast != null && fast.next != null ){
            fast = fast.next.next;
            slow = slow.next;
        }
        ListNode head2= slow.next;
        slow.next = null;

        // 2.排序
        ListNode left = sortInList(head);
        ListNode right = sortInList(head2);

        // 3.合并两个有序链表
        ListNode ans = new ListNode(-1);
        ListNode res = ans;
        while(left != null && right != null){
            if(left.val <= right.val) {
                res.next = new ListNode(left.val);
                left = left.next;
            }else {
                res.next = new ListNode(right.val);
                right = right.next;
            }
            res = res.next;
        }
        if(left == null){ res.next = right;}
        if(right == null){ res.next = left;}

        return ans.next;


    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 17:10
什么素质,我请问呢,要掉小珍珠了。。。又憋屈又生气
苍蓝星上艾露:给它们能的,一群dinner牛马挥刀向更弱者罢了。我写的开源求职AI co-pilot工具,优化你的简历,找到你匹配的岗位,定制你的简历,并让你做好面试准备https://github.com/weicanie/prisma-ai
点赞 评论 收藏
分享
码农索隆:想看offer细节
点赞 评论 收藏
分享
07-09 18:33
门头沟学院 Java
这么逆天每年都有人去???&nbsp;填多益网申就是大型的服从性测试
鲁大牛:辅导员在群里发了这个公司我就申了一下。网申居然要写当场开摄像头写两篇不少于三百字的作文。太逆天了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务