题解 | 单链表的排序

单链表的排序

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

import java.util.*; 
import java.util.PriorityQueue;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 the head node
     * @return ListNode类
     */
    public ListNode sortInList (ListNode head) {
        if(head == null || head.next == null) {
            return head;
        }
	  	// 申明一个优先级队列,并传入一个比较器,比较ListNode中val值的大小
        Queue<ListNode> queue = new PriorityQueue<>((x,y) -> {
            return x.val - y .val;
        });
	  	// 把ListNode中所有的节点放入到优先级队列中
        queue.add(head);
        while(head.next != null) {
            head = head.next;
            queue.add(head);
        }
		// 从优先级队列中poll元素,组装结果
        ListNode result = queue.poll();
        ListNode tempNode = result;
        while(!queue.isEmpty()) {
            tempNode.next = queue.poll();
            tempNode = tempNode.next;
        }
	 	// 把最后一个节点的下一个节点置为null,防止循环
        tempNode.next = null;
        return result;
    }
}

全部评论

相关推荐

数学转码崽:太可惜了老哥,你这背景这么好,但是项目真的拉了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务