2016-10-07 5 views
0

Я делал вопрос онлайн-кодирования об удалении элементов нечетного значения из связанного списка.Удалить элемент с нечетным значением из LinkedList

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

public static LinkedList(LinkedList header){ 

     if(header.val%2 != 0){ 
       header = header.next; 
     } 

     LinkedList current = header.next; 
     LinkedList previous = header; 

     while(current!=null){ 
       if(current.val%2 != 0){ 
         previous.next = current.next; 
         current = current.next; 
       } 
     } 

     return header; 
} 
+1

Подсказка: что происходит в вашем коде, когда значение равно? – RBarryYoung

+0

@RBarryYoung Получил это! Благодаря! –

+0

(Теперь у вас есть _that_ понял: что, если первый элемент нечетный? Вы переустанавливаете один 'следующий' для каждого нечетнозначного элемента - это необходимо для прогонов _odds_?) – greybeard

ответ

0

2 случая, которые сделают этот код не в состоянии:

  1. Если входной связанный список пуст, доступ header.val и header.next может вызвать исключения.

  2. Если есть только четные элементы, current и previous никогда не будут продвинуты, что приведет к бесконечному циклу.

+0

Вопрос предполагает, что вход не пусто. Но у меня есть вторая точка, почему это приведет к таймауту. Благодаря! –

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