繁体   English   中英

使用递归在Java中的双链表中查找最小的元素

[英]Using recursion to find smallest element in double linked list in Java

我需要类分配来编写具有指定方法签名的方法:

 public static <T extends Comparable<T>> T findSmallest(DoubleLinkedListADT<T> list)

该方法必须返回列表中最小的元素,必须递归,我不能修改方法签名,并且增长函数的O不能大于n(O(nlogn)不可接受。)

这是我到目前为止的内容:

public static <T extends Comparable<T>> T findSmallest(DoubleLinkedListADT<T> list) {

    if(list.isEmpty()){
        return null;
    }
    ListIterator<T> lit = list.listIterator();
    T smallest = lit.next();

    return search(lit, smallest);
}

private static <T extends Comparable<T>> T search(ListIterator<T> lit, T smallest){

    if(lit.hasNext()){
        if(smallest.compareTo(lit.next())==1){
            smallest =  lit.previous();
            lit.next();
        }
        search(lit, smallest);
    }
    return smallest;
}

(不必担心DoubleLinkedListADT,这是老师提供的接口。可以将DoubleLinkedList引用分配给DoubleLinkedListADT类型,这是它的子级。)

这适用于空列表,单个元素列表和两个元素列表。 任何更大的东西都会失败。 我想我只是不太了解递归,因为我对搜索方法中的第一个return语句不是findSmallest类中返回给搜索调用的返回值感到困惑。 它使用搜索中的最后一个返回调用,该调用使用第一个最小的对象引用(错误的最小引用)。

我不是在找人给我正确的代码。 我想弄清楚为什么它在做什么。

好吧,您的代码很复杂,所有双向爬网看起来都很讨厌。 这是我能够提供的最优雅的解决方案列表:

public class Test {

    public static Integer min(Iterator<Integer> it) {
        if (it.hasNext()) {
            return Math.min(it.next(), min(it));
        }
        return Integer.MAX_VALUE;
    }

    public static void main(String[] args) {
        System.out.println(min(Arrays.asList(2, 3, 1, 4, 5).iterator()));
    }
}

使它适应任何类型的列表应该很容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM