题解 | #单链表的排序#

单链表的排序

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

思路,快速排序。

第一步,拿到第一个元素。

第二步,剩下的元素依次跟第一个比较,小的放在left,大的放在right,将链表分成了两段。

第三步,对分出来的left和right分别排序,然后组装起来返回即可。

代码如下:

import java.util.*;

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

public class Solution {
    /**
     *
     * @param head ListNode类 the head node
     * @return ListNode类
     */
    public ListNode sortInList (ListNode head) {
        /**
        快速排序
         */

         return sort(head);
    }


    public ListNode sort( ListNode head ) {
        if (head == null) {
            return null;
        }

        ListNode h = head.next;
        ListNode left = new ListNode(0);;
        ListNode right = new ListNode(0);

        while ( h != null ) {
            if (head.val >= h.val) {
                ListNode temp = left.next;
                left.next = h;
                h = h.next;
                left.next.next = temp;
            } else {
                ListNode temp = right.next;
                right.next = h;
                h = h.next;
                right.next.next = temp;
            }
        }

        left = sort(left.next);
        right = sort(right.next);
        ListNode tail = findTail(left);
        if(tail==null){
            head.next = right;
            return head;
        } else {
            tail.next = head;
            head.next = right;
            return left;
        }
    }

    public ListNode findTail( ListNode head ){
        if(head==null) return null;

        while(head.next!=null){
            head = head.next;
        }
        return head;
    }



}

#链表排序#
全部评论

相关推荐

简历求拷打,海投简历发过去就已读不回了求大佬们指点
程序员牛肉:基本不能了,估计你得放弃秋招,九月份找实习之后明年的春招开始正式找工作
点赞 评论 收藏
分享
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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