2016-02-26 3 views
0

Во-первых, у меня есть реализация связанного списка очереди, где Dequeuing происходит на Глава связанного списка. У меня есть один без аргументов нет возврата публичного метода:Как вы создаете рекурсивный метод JAVA Dequeue

public void recursiveDequeue() { 
    head = recursiveDequeue(size()-1, head); 
} 

И второй способ:

private Node recursiveDequeue(int index, Node current) { 
    if (current==null) { 
     // some code I need to write 
    } 
    return current; 
} 

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

Как вы создаете метод рекурсии, который удаляется из головы, но чей метод вызова уже относится к голове? Как эта рекурсия? Я даже не знаю, что это должно делать.

+2

Так что же этот метод должен делать? Просто «вытащить» передний узел (головку) из списка и вернуть его? Это не похоже на то, что рекурсия необходима, если только параметр 'index' не должен указывать« сколько »для dequeue. –

+2

Если все, что вы делаете, - это удаление истории, почему рекурсия? – ChiefTwoPencils

ответ

1

Возможно, что-то вроде следующего. Я не знаю, что именно делать с индексом, кажется излишним, но если это число элементов DEQUEUE как предложено в комментариях:

private Node recursiveDequeue(int index, Node current) { 
    if (current==null || index==0) { 
     return null; 
    } 
    return recursiveDequeue(index-1,current.next); // for a single-linked list 
} 
0

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

Если условие предназначено быть current != null, то это возможно:

if (current != null) { 
    if (index > 0) 
     return recursiveDequeue(index - 1, current.getNext()); 
} 
return current; 

Это index элементов из очереди. Учитывая, что ваш метод аргументов не вызывает его с помощью size - 1, он будет деактивировать все, кроме последнего элемента.

+0

@ cricket_007 К сожалению. Работал на C++ весь день. – sprinter

+0

Бывает. Я занимаюсь Python и Java. Иногда это сложнее. –

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