这是来自教科书实现的链表类的片段:
public class ListItem
{
Object item;
ListItem next;
public ListItem(Object item)
{
this.item = item;
next = null;
}
}
看起来 recursion--classListItem
的实例变量也名为ListItem
. 调用这种递归是否合适?
这是我曾经在 Pascal 中定义链表的方式。我看到了一些你可能称之为递归(pNodeType
,aka ^NodeType
)的提示,但它不像 Java 代码片段中的上述内容:
type
**pNodeType** = ^NodeType ;
NodeType = record
name : string ;
next : **pNodeType** ; // conceptually, change the type to **^NodeType**
end ;
所以我猜因为Java缺少指针并且对象是引用,所以我毕竟在看同样的东西。正确的?
所以如果我想要一个双向链表(也向后),我会像这样添加一个实例变量
ListItem prev;
并像这样向构造函数添加一行代码
prev = null;
并采取与前向链接工作相同的谨慎程度。
正确的?
最后,如果我想要一个通用链表,我只需像这样更改代码段并将方法中所有出现的“Object”更改为“E”):
public class ListItem<E> {
E item;
ListItem next;
public ListItem(E item) {
this.item = item;
next = null;
}
}
正确的?