【问题标题】:Merge Sort in String using LinkedList使用 LinkedList 在字符串中合并排序
【发布时间】:2013-05-19 14:02:38
【问题描述】:

我使用 LinkedList 作为动态数组,然后该数组包含需要使用合并排序算法按字母顺序排序的字符串,该算法被添加到方法中,结果它不起作用。有什么建议吗?

public static LinkedList<String> merge(LinkedList<String> linkedList, LinkedList<String> linkedList2) {
        LinkedList<String> result = new LinkedList<String>();
        if(linkedList.size() == 0)
            result.add(linkedList2.remove());
        else if (linkedList2.size() == 0)
            result.add(linkedList.remove());

        for(int i=0; i<linkedList.size(); i++) {
            if(linkedList.get(i).compareTo(linkedList2.get(i)) < 0)
                result = linkedList;
            else
                result = linkedList2;
        }

        return result;
    }

【问题讨论】:

    标签: arrays string linked-list mergesort compareto


    【解决方案1】:

    这里的逻辑是错误的,正确的逻辑见cmets:

        while(0 < linkedList.size() || 0 < linkedList2.size())
            if(0 == linkedList.size())        // if linkedList is empty
                result.add(linkedList.remove());        // should add head of linkedlist2 to result
            else if (0 == linkedList2.size())        // vice
                result.add(linkedList2.remove());       // versa
            else {
                linkedList.get(0).compareTo(linkedList2.get(0));      // else add the smaller of the two; you are just comparing, not adding the smaller
            }
    

    【讨论】:

    • 你的循环很好,但逻辑需要更正。现在空案例的逻辑是正确的,但是您需要再次将它们移回 while 循环。考虑:如果列表之一为空,我们需要将所有其他列表添加到合并的列表中。并且比较情况是错误的 - 您需要一次添加一个列表中的较小元素。
    猜你喜欢
    • 1970-01-01
    • 2013-03-31
    • 2020-01-28
    • 2011-08-18
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多