这个教科书链表是否涉及"recursive constructor"?



这是来自教科书实现的链表类的代码片段:

public class ListItem
{
  Object   item;                  
  ListItem next;                  
  public ListItem(Object item) 
  {
    this.item = item;             
    next      = null;                  
  }
}

它看起来像递归--类ListItem的实例变量命名为ListItem。称之为递归合适吗?

以下是我曾经在 Pascal 中定义链表的方式。我看到了一个你可以称之为递归(pNodeType,又名递归的暗示。 ^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;                                   
  }
}

右?

没有递归。

声明与类类型相同的字段时,不会实例化实例。


包含构造函数初始化:

next = new ListItem(null);

或者声明包括初始化:

ListItem next = new ListItem(null);

会有递归


关于一般问题,您还需要键入该字段:

public class ListItem<E> {
  E item;                    
  ListItem<E> next;  // Added generic parameter                
  public ListItem(E item) {
    this.item = item;                              
  }
}

请注意,您不需要编写代码:

next = null;  // redundant

因为默认初始化的值已经为 null。

相关内容

  • 没有找到相关文章

最新更新