2014-10-14 2 views
0

У меня возникли проблемы с записью метода finalIndexOf, который должен возвращать индекс в списке текущих объектов последнего элемента, который равен элементу параметра, что означает, что дублирующие элементы в порядке. Например. если связанный список имеет 2,4,4,5,6,7,7,7 и finalIndexOf (4), то 2 должен быть возвращен, поскольку последние 4 находятся в индексе 2. Когда я запускаю то, что у меня есть для finalIndexOf, я похоже, входят в бесконечный цикл какого-то рода, в результате чего ничего не возвращается, потому что ничего не происходит, поэтому мне приходится вручную завершать программу. Любая помощь приветствуется!Связанный список index method-java

private class Node<N extends Comparable<N>> { 
    private N data; 
    private Node<N> next; 
} 

protected Node<L> head; 

public List() { 
    head = null; 
} 

private Node<L> getLast() { 
    Node<L> node = head; 
    while (node.next != null) { 
     node = node.next; 
    } 
    return node; 
} 

public int listSize() { 
    if (head == null) 
     return 0; 
    int size = 0; 
    for (Node<L> n = head; n != null; n = n.next) 
     size++; 
    return size; 
} 

public int finalIndexOf(L element) { 
    int index = listSize(); 
    Node<L> n = getLast(); 

    while (n != null) { 
     if ((element == null) && (n.data == null)) 
      return index; 
     if (n.data != null) 
      if (n.data.compareTo(element) == 0) 
       return index; 
     index--; 
    } 
    return -1; 
} 
+0

Где вы указали тип параметра 'L'? – afzalex

ответ

0

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

private int finalIndexOf(L element) { 
    int index = 0; 
    int result = -1; 
    Node<L> node = head; 
    while (node != null) {    
     if (node.data != null && node.data.compareTo(element) == 0) { 
      result = index; 
     } 
     node = node.next; 
     index++; 
    } 
    return result; 
} 
0

У вас есть бесконечный во время цикла, потому что вы никогда не изменить n переменного условия цикла в цикле.

Вот подсказка: перечислите список от первого элемента до последнего и верните индекс последнего найденного вами совпадения.

0

Кажется, вы пытаетесь вернуться назад из конца связанного списка и возвратите индекс, как только попадете в совпадение. Это хорошая стратегия, но у вас нет node.prev. У вас есть только связанный список. Кроме того, вы изменяете index в своем цикле while, но значение n никогда не изменяется. Вместо этого попробуйте выполнить итерацию с головы до конца и сообщите об этом в последний раз, когда найдете совпадение.

Смежные вопросы