2014-11-18 3 views
0
public class ListItem { 

    final int number; 
    ListItem next; 

    public static ListItem evenElements(ListItem ls) { 
     ListItem l = ls.duplicate(); 
     if(ls == null){ 
      return null; 
     } 
     else{ 
      for(int i = 0; i < ls.length(); i++){ 

       if(ls.number % 2 == 0){ 
        l = ls; 
        ls = ls.next; 
       } 
       else{ 
        ls = ls.next; 
       } 

      } 
      return l; 
     } 
    } 

Когда я запускаю этот код списка элементов: [3,2,6,9], он возвращает [2,6,9], когда он должен возвращать только [2,6]. Дублирующий метод дублирует ListItem, а метод length определяет длину списка. Как я могу исправить эту проблему?Как найти четные элементы в списке элементов?

+0

Почему вы дублирующий первоначальный список? Вы хотите инициализировать пустой список, а затем добавить к нему четные числа и вернуть этот список. – dursk

+0

Я пробовал инициировать пустой список, и та же проблема возникает – user4259498

+0

Вы имеете дело с ** LinkedList **? –

ответ

2

Если я пытаюсь сохранить свою логику:

public static ListItem evenElements(ListItem ls) { 
    ListItem output = null; 

    ListItem current = ls; 

    // While the next item exists 
    while (current != null){ 

     // If it's even 
     if (current.number % 2 == 0) { 

      // If it's the first time we see an even number, initialize output 
      if (output == null) { 
       output = current.duplicate(); 
      } 
      // Otherwise append this even number to our list of even numbers 
      else { 
       output.next = current.duplicate(); 
       output = output.next; 
      } 
     } 
     // Move the next item 
     current = current.next; 
    } 
    if (output != null) { 
     output.next = null; 
    } 
    return output; 
} 
+0

этот ответ был отмечен как ответ низкого качества, пожалуйста, предоставьте некоторое объяснение для вас. –

+0

@Henri Lapierre Как этот метод найти четные числа, ваши комментарии должны относиться к четным числам, а не к нечетным ... –

+0

Как неясно, если duplicate() дублирует только элемент или элемент плюс все его преемник, я добавил строка в конце "output.next = null;". Это гарантирует, что даже если преемник будет скопирован, мы избавимся от них, прежде чем вернуться. –

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