найти Макс пункт в списке java - PullRequest
0 голосов
/ 26 марта 2020

Мне нужна помощь с домашним заданием.

. Мой вопрос: как завершить метод findMaxItem, приведенный ниже, чтобы вернуть указатель на самый большой элемент связанного списка, заданный параметром ptr, или вернуть ноль, если список пусто. Решение должно быть рекурсивным.

Это мой мой ответ, но он неправильный:

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;
}

Спасибо всем за помощь:)

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Одним из возможных решений является создание метода, который получает массив со значениями -1 и последним значением. Затем проверьте, больше ли следующий последний элемент, чем тот, который у вас есть, или нет, если это так, новым значением является текущий максимум, удалите его и вызовите тот же метод, используя новый массив (со удаленным значением) и текущий максимум .

Базовый случай будет, когда в массиве будет только один элемент, возьмите или сравните его с последним максимальным значением, которое вы передали в recuerdo, будет función и вернете большее значение из этих двух. Последнее будет максимальным рекурсивным способом.

У меня нет возможности сейчас написать код, но в метакоде это должно быть что-то вроде

private int finalMax
public void maxRecursive(arrayList<int>List, Int tempMax){
  //Base case
   Int newTempMax = tempMax
    If (tempMax >list.get(list.size-1)){
       newTempMax=list.get(list.size()-1)
    }
    If (list.size()>1){
      List.remove(list.size()-1)
      maxRecursive(list, newTemMax)
    }else{
       finalMax=newTempMax
    }
 }

Как я уже сказал это не что иное, как псевдокод, который выглядит адаптированным к java, сейчас я не могу ничего лучше, но я думаю, что вы можете получить Идею отсюда.

Best!

0 голосов
/ 26 марта 2020

По крайней мере, вы правильно поняли первую часть: если список пуст, верните 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 пусто.

...