Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java单链表和构造函数_Java_List - Fatal编程技术网

Java单链表和构造函数

Java单链表和构造函数,java,list,Java,List,我试图弄清楚如何在列表构造函数中初始化当前对象列表,使其最初不包含任何元素。如果我想使用一个单链表,我该怎么做?我知道这是一个关于列表的基本问题,哈哈。如果我想使用双链接列表、尾部引用、循环链接或虚拟节点(如果对所有节点都这样做不太麻烦的话),会有什么不同 公共类列表实现Iterable{ 私有类节点{ 私有数据; 私有节点下一步; } 当链表发出结束信号时,有两种方法可以考虑链表(基本上是空列表的情况) 第一个是将节点设置为null,之后当您对列表执行操作(添加、删除、迭代)时,可以在继续之前

我试图弄清楚如何在列表构造函数中初始化当前对象列表,使其最初不包含任何元素。如果我想使用一个单链表,我该怎么做?我知道这是一个关于列表的基本问题,哈哈。如果我想使用双链接列表、尾部引用、循环链接或虚拟节点(如果对所有节点都这样做不太麻烦的话),会有什么不同

公共类列表实现Iterable{
私有类节点{
私有数据;
私有节点下一步;
}

当链表发出结束信号时,有两种方法可以考虑链表(基本上是空列表的情况)

第一个是将节点设置为null,之后当您对列表执行操作(添加、删除、迭代)时,可以在继续之前检查它是否为null

第二种方法是使用一个特殊对象(称为sentinel)作为标志而不是null。这可能是一个特殊节点,当您从中获取数据时会引发异常。优点是您不需要在所有方法中管理null值,但可能需要改为管理异常

对于双链接列表,它是完全相同的,只是节点内容发生了变化(添加了一个反向指针)

对于尾部引用,您在list类中添加一个指针,该指针将引用保留在列表尾部,因此您将其作为头指针进行管理,它最初为null或带有一个标志对象,当第一个对象添加到列表中时,两个引用将在同一节点上更新

在循环列表的情况下,它在初始化时仍然保持不变,然后在添加第一个对象时,同时将其自身链接到该对象

例:

公共类列表实现Iterable{
私有类节点{
私有数据;
私有节点下一步;
}
节点第一节点;
公开名单(){
firstNode=null;
}
//其他方法
}

你能明确地告诉我如何在构造函数中将节点设置为null吗?好吧,这只是一个变量赋值,但我正在将它添加到我的答案中。噢。你提到的第二个选项呢?你用null值初始化节点,然后搜索“sentinel对象”或“sentinel值”
       public class List<T extends Comparable<T>> implements Iterable<T> {
             private class Node<D extends Comparable<D>> {
                private D data;
                private Node<D> next;
              }
 public class List<T extends Comparable<T>> implements Iterable<T> {
         private class Node<D extends Comparable<D>> {
            private D data;
            private Node<D> next;
          }
          Node firstNode;

          public List(){
               firstNode=null;
          }

         // other methods
 }