gpt4 book ai didi

Java-单链表和构造函数

转载 作者:行者123 更新时间:2023-11-30 09:01:51 24 4
gpt4 key购买 nike

我想弄清楚如何在 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;
}

最佳答案

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

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

第二个是使用一个特殊对象(称为 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
}

关于Java-单链表和构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26207890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com