如何使用优先队列对链表进行排序

Posted

技术标签:

【中文标题】如何使用优先队列对链表进行排序【英文标题】:How to sort a linked list using priority queue 【发布时间】:2021-11-24 14:14:39 【问题描述】:

我一直在尝试编写一个方法来获取链表并使用优先级队列对其进行排序

我不知道如何编写此代码我了解优先级队列应该如何工作,但我不知道如何将其放入代码中

Override
    public void priorityEnqueue(AnyType x) 
       if (isEmpty())      
    back = front = new ListNode<>(x);
    
    
    back=back.next = new ListNode<>(x);
        
    

我知道这只会按原样返回列表而不对其进行排序,而这正是我需要帮助的原因

【问题讨论】:

请不要附上图片,这些图片在所有级别上都更难用于阅读您的代码,而不仅仅是实际复制和粘贴您的代码并使用问题编辑器顶部的代码格式化按钮。跨度> 另外,在你的代码中需要工作的是你似乎使用的是现代编辑器,而不是它的代码缩进功能。这样做,然后用问题中的实际代码替换您的图像。没有人会后悔正确缩进代码——它比我知道的任何其他方法更快地发现错误和逻辑问题。当学生声称自己是“经验丰富的程序员”但实际上并非如此时,不正确的缩进代码实际上是我在学生身上寻找的第一个迹象。 另外,您应该始终使用它所涉及的编程语言来标记您的问题。这不仅可以为您的代码提供正确的语法高亮显示,还可以为专家提供指导。 现在,回到问题的重点: 如何你知道这个 sn-p 是“唯一需要工作的代码”?我发现这不太可能,因为否则你已经解决了手头的问题。但是:您基于一些(可能非常好!)分析得出了这个结论;我们不知道该分析,但如果您告诉我们,它将极大地帮助任何潜在的答案。否则,您的问题只是“调试我的代码;我根本不会帮助您”,而这些问题显然是题外话,因为它们对于回答者来说只是很多工作,而对于提问者来说成功的机会很小。 【参考方案1】:

这是我想出来的答案

@Override
   public void priorityEnqueue(AnyType x) 
   ListNode<AnyType> node = new ListNode<>(x);
   
   if(front == null)
       front = node;
            back = node;
    
    else     
    if(front.element.compareTo(x) > 0)
        node.next = front;
            front = node;
    
else  
    ListNode<AnyType> current = front; 
        while(current.next != null && current.next.element.compareTo(x) < 0)
            current = current.next;
               node.next = current.next; 
               current.next = node; 
     if(node.next == null)
        back = node;
           
       
           

【讨论】:

以上是关于如何使用优先队列对链表进行排序的主要内容,如果未能解决你的问题,请参考以下文章

优先级队列(从头开始)和链表

如何使用优先队列根据键值对的值进行排序

如何对不同队列上的消息进行优先级排序?

优先队列

优先队列

[LeetCode]23. 合并K个排序链表(优先队列;分治待做)