Это фрагмент из связанного класса список из реализации учебника:Связанный ли этот учебник список «рекурсивный конструктор»?
public class ListItem
{
Object item;
ListItem next;
public ListItem(Object item)
{
this.item = item;
next = null;
}
}
Похоже рекурсии - класс ListItem
имеет экземпляр переменной также имени ListItem
. Правильно ли назвать эту рекурсию?
Вот как я однажды определил связанный список в Паскале. Я вижу намек на то, что вы могли бы назвать рекурсию (pNodeType
, иначе ^NodeType
), но он не чувствует, как что выше фрагмент кода Java:
type
**pNodeType** = ^NodeType ;
NodeType = record
name : string ;
next : **pNodeType** ; // conceptually, change the type to **^NodeType**
end ;
Так что я думаю, так как Java не хватает указателей и объекты ссылки, В конце концов, я смотрю на то же самое. Правильно?
И поэтому, если я хотел дважды связанный список (назад, тоже), я бы добавить переменную экземпляра, как так
ListItem prev;
и добавить строку кода в конструктор как так
prev = null;
и проявите ту же самую заботу, которая заставила работать с прямой связью.
Справа?
И, наконец, если я хотел общий связанный список, я бы просто изменить фрагмент кода, как это и изменить все вхождения «Объект» в «Е» в методах):
public class ListItem<E> {
E item;
ListItem next;
public ListItem(E item) {
this.item = item;
next = null;
}
}
Right ?
Я не вижу никакой рекурсии - конструктор не называет себя. И нет ничего плохого в том, что у вас есть экземпляр того же типа - в противном случае было бы сложно реализовать Linked List! –
Здесь нет рекурсии. –
Рекурсия - это чисто концепция времени исполнения. См. [Этот ответ] (http://stackoverflow.com/a/1949502/18157) –