Функция для поиска второго по величине ключа в таблице символов - PullRequest
0 голосов
/ 22 сентября 2018

поэтому я пишу функцию, которая найдет второй по величине ключ в неупорядоченной таблице символов, используя реализацию связанного списка, код, который у меня пока не работает, работает правильно, и мне интересно, есть ли у кого-нибудь советы, спасибо!

public Key secondLargestKey () {
          if(first == null) return null;
          if(size()<=1)  return null;
          Node secondMax=null;
          Node Max=first;
           for (Node pointer=first.next;pointer.next!=null;pointer=pointer.next) {
              if(Max.key.compareTo(pointer.key)<=0) {
                 secondMax=Max;
                 Max=pointer.next; 
               }
              else {
                 secondMax=Max.next;
                 Max=pointer; 
              }

              }   
            return Max.key;
        }`

Вывод:

secondLargestKeyTest: Correct  String  Answer: null
secondLargestKeyTest: Correct  String A Answer: null
secondLargestKeyTest: *Error*  String AB Expected A Actual: B
secondLargestKeyTest: Correct  String ABC Actual: B
secondLargestKeyTest: Correct  String ABABABC Actual: B
secondLargestKeyTest: *Error*  String ZAYBXC Expected Y Actual: Z

1 Ответ

0 голосов
/ 22 сентября 2018

Ваш код близок к правильному.Условие завершения в цикле for должно проверять, что pointer!=null, а не pointer.next!=null.Кроме того, если pointer.key меньше Max, вам нужно сравнить его с secondMax и принять его, если оно больше, или secondMax равно null (т.е. еще не установлено)

Вот код для справки:

static <E extends Comparable<E>> E secondMax(Node<E> head)
{
  if(head == null) return null;

  E max2 = null;
  E max1 = head.key;
  for(Node<E> curr=head.next; curr!=null; curr=curr.next)
  {
    if(curr.key.compareTo(max1) >= 0)
    {
      max2 = max1;
      max1 = curr.key;
    }
    else if(max2 == null || curr.key.compareTo(max2) > 0)
    {
      max2 = curr.key;
    }
  }
  return max2;
}

static class Node<E>
{
  E key;
  Node<E> next;
  public Node(E k)
  {
    key = k;
  }
}
...