Java单链表和构造函数

时间:2014-10-05 22:30:47

标签: java list

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

       public class List<T extends Comparable<T>> implements Iterable<T> {
             private class Node<D extends Comparable<D>> {
                private D data;
                private Node<D> next;
              }

1 个答案:

答案 0 :(得分:2)

当链接列表发出信号列表的结尾时(基本上是空列表的情况),有两种思考方式。

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

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

如果是双链表,它完全相同,只有节点内容发生变化(你有一个后加指针)

如果是尾部引用,则在列表类中添加一个指针,在列表尾部保留引用,因此将其作为头指针进行管理,它最初为null或带有标志对象,并且当第一个对象被添加到列表中,两个引用都将在同一节点上更新。

如果是圆形列表,它在初始化时仍然保持不变,那么当你添加第一个对象时,你可以同时将它自己链接到它。

例如:

 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
 }