首页 > 解决方案 > 在列表 java 中查找 Max Item

问题描述

我的作业需要帮助

我的问题是:如何完成下面的findMaxItem方法,返回一个指向参数ptr给出的链表最大元素的指针,如果链表为空则返回null。解决方案必须是递归的。

这是我的回答,但不正确:

public static Node findMaxItem (Node ptr) {
    if (ptr == null) {
        return null;

    } else {
        if (ptr.next.data > ptr.data) {
            Node n = ptr.next;


            if (ptr.next.data >= n.data) {

                n = ptr.next;
                //ptr = n.next;
                findMaxItem(n);
            } else {

                ptr = ptr.next;
                findMaxItem(ptr);
            }
            ptr = n.next;
            findMaxItem(ptr);
            ptr = n;
        }
    //   ptr = ptr.next;
     //  findMaxItem(ptr);
    }
    return ptr;
}

谢谢大家的帮助:)

标签: javarecursion

解决方案


你至少第一部分是正确的:如果列表为空,则返回null。这是递归的基本情况。

    if (ptr == null) return null;

您打算在其余情况下使用递归。但是怎么做?

如果列表不为空,您可以将其分为两部分:第一项和列表的其余部分。它会帮助您在列表的其余部分中“找到最大项目”吗?

    Node restOfTheList = ptr.next;
    Node maxOfRestOfTheList = findMax(restOfTheList);

现在您有了第一个项目,由 引用ptr,以及列表其余部分中具有最大价值的项目。如果您比较其中的数据,您可以找出哪个具有最大价值。无论它是什么,那都是具有最大项目的节点。那有意义吗?

    if data of "ptr" is greater than data of "maxOfRestOfTheList": return ptr
    else: return maxOfRestOfTheList;

您还必须处理列表中只有一项的情况。在那种情况下restOfTheList是空的。


推荐阅读