2011-03-14 3 views
1

У меня есть это назначение Java в связанном списке. Вопрос задает поиск n-го узла из последнего. Я тестировал его на разные входы, и он отлично работает, но судья не принимает мое решение. Вот моя функцияНазначение Java

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

Node findNtoLast (Node start, int n) 
{ 
    Node p,q; 

    p = start; 

    for(int i=0;i<n;i++) 
    { 
     p = p.next; 
    } 

    q = start; 

    while(p.next != null) 
    { 
     p = p.next; 
     q = q.next; 
    } 

    return q; 
} 

Пример ввода:

A -> B -> C -> D

n  output 
0  D 
1  C 
2  B 
3  A 

Можете ли вы думать ни о чем, что это неправильно в функции?

+0

Попробуйте использовать свою функцию со списком, который меньше, чем 'n'. –

+0

@ Jon- Если размер списка известен, работа проще. – Mahesh

ответ

5

Я думаю, что вам нужно обрабатывать случай, когда вход

n >= num of nodes 

Ваша текущая функция даст NullPointerException для такого входа.

EDIT:

Вы можете подсчитать количество узлов и сравнить. В качестве альтернативы вы можете сделать чек в своей петле for как:

for(int i=0;i<n;i++) { 

    // have I reached the last node ? 
    if (p.next != null) { 
     p = p.next; 
    } else { 
     // n happens to be >= num of nodes..return null 
     return null; 
    } 
} 
+0

Вы правы человек. Должен ли я подсчитывать количество узлов и сравнивать их? – Jon

+0

@Jon: ответ обновлен. – codaddict

+0

Это сработало. Большое спасибо. – Jon

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