【问题标题】:How to alphabetize an ordered linked list in Java?如何在 Java 中按字母顺序排列有序链表?
【发布时间】:2017-02-27 04:05:54
【问题描述】:

我正在使用的程序遇到很多麻烦。

该程序应该按字母顺序打印出有序链表的元素(因为没有可用于列表的设置器)。这是我所拥有的:

GOrderedList 是节点,Event 是值。我的想法是尝试查找单词并将它们按字母顺序放置在数组列表中。

public static ArrayList <String> sortEvents (GOrderedList <Event> C){

    //create arraylist 
    ArrayList <String>  sortedList = new ArrayList <String>(); 

    while (C.getNext()!=null){
        GOrderedList <Event> first = C.getNext();
        String highest = first.getValue().getname(); 

        while (first.getNext()!=null){
        if (first.getNext().getValue().getname().compareTo(highest)<0){
            highest=C.getNext().getValue().getname(); 
            }
            first=first.getNext(); 
        }
        sortedList.add(highest);
        C = C.getNext(); 
    }

这正在生成列表 - 这是令人鼓舞的 - 但它是乱序的。我的想法是按字母顺序将元素放在新的 ArrayList 中。我可以将项目放在 ArrayList 中,然后对其进行排序,但我宁愿不这样做。

【问题讨论】:

  • 输出错误?它产生什么样的输出?你期望的输出是什么?
  • GOrderedList的层次结构是什么?你不能使用 Collections.sort() 吗?
  • 对不起,以您提供的信息,我们没有机会帮助您。寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。
  • 那是纽约大学计算机科学学院的GOrderedList 吗? link
  • 这是家庭作业吗?

标签: java list sorting linked-list


【解决方案1】:

您可以使用比较器对其进行排序。如下所示。

public static ArrayList<String> sortEvents(GOrderedList<Event> C) {
        // create arraylist
        ArrayList<String> sortedList  = new ArrayList<String>();

        while (true) {
            GOrderedList<Event> first = C.getNext();
            if (first == null) {
                break;
            }
            String highest = first.getValue().getname();
            sortedList .add(highest);
        }
        Collections.sort(sortedList , new Comparator<String>() {
            public int compare(String f1, String f2) {
                return f1.toString().compareTo(f2.toString());
            }
        });

        return sortedList ;
    };

【讨论】:

    【解决方案2】:

    代码有几个问题:

    1. 在 while 循环中调用 getNext() 每次都会递增并跳过一个值。您可能需要调用hasNext() 方法。

    2. 外循环的每次迭代都需要将其元素添加到适当的位置。正如所写,增加的价值总是在最后。

    如前所述,有一些标准方法可以执行此操作,但我的假设是您需要将此作为练习。如果没有,请使用比较器。字符串的自然比较可能会给你你想要的。

    【讨论】:

    • 对于1.,如果我猜对了GOrderedListgetNext()不前进,只返回对下一个节点的引用(或null)。对于 2.,如果列表已经排序,正如类名所暗示的那样,这只是在需要不同的排序时才会出现的问题。我希望 OP 能告诉我们。
    • 你说得对,getNext() 不会前进,只会返回引用。该列表已经排序,并且不能自行重新排序 - 但需要按字母顺序打印,因此问题。我的想法是按字母顺序将元素放在新的 ArrayList 中。我可以将项目放在 ArrayList 中,然后对其进行排序,但我不想这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多