当前位置: 首页 > 知识库问答 >
问题:

理解双链表

洪伟彦
2023-03-14

我在CS课上有一个关于循环双链表的作业。我们得到了一个节点类来设置链接等。

public class Node {
private Node previous, next;
private Object data;

public Node(Object data) {
    this.data = data;
}

public Node() {

}

public Node(Object data, Node previous, Node next) {
    this.previous = previous;
    this.next = next;
    this.data = data;
}

public Node getPrevious() {
    return previous;
}

public void setPrevious(Node previous) {
    this.previous = previous;
}

public Node getNext() {
    return next;
}

public void setNext(Node next) {
    this.next = next;
}

public Object getData() {
    return data;
}

public void setData(Object data) {
    this.data = data;
}

}

我们的任务是实施一些方法。在list类中,创建了一个名为“base”的节点

public class DList {



private Node base;

public DList() {

}

所有这些方法都需要某种形式的遍历列表。根据我的理解,将临时节点设置为与base相等。getNext()将给出列表的第一个节点,并测试temp!=base将是我到达列表末尾的检查,因为base节点充当其余节点的锚(如果我的理解正确的话)。

然而,当我尝试执行一些代码时,比如:

 public int size() {
    int count = 0;
    if (base.getNext() == base)
        return count;
    else {
        Node temp = base.getNext();
        while (temp != base) {
            temp = temp.getNext();
            count++;
        }
    }
    return count;
}

在我说Node temp=base.getNext()的行中,我得到一个空指针异常;对于我来说,我不明白为什么,因为就像我之前说的,我认为base.getNext()将是我的列表的第一个元素。

共有1个答案

陈瀚
2023-03-14

不需要虚拟基本节点。在这种情况下,base最初为null。在这种情况下:

public int size() {
    int count = 0;
    if (base != null) {
        Node temp = base;
        do {
            temp = temp.getNext();
            count++;
        } while (temp != base);
    }
    return count;
}
 类似资料:
  • 本文向大家介绍Python双链表原理与实现方法详解,包括了Python双链表原理与实现方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python双链表原理与实现方法。分享给大家供大家参考,具体如下: 文章目录 Python实现双链表 单链表与双链表比较 双链表的实现 定义链表节点 初始化双链表 判断链表是否为空 双链表尾部添加元素 双链表头部添加节点: 双链表表头删除 双链表按位

  • 我写了一个程序,通过双链表管理银行账户,但我发现取消程序有问题。 我仍然有同样的问题,即使我尝试了这个方法:-(pnt)-

  • 本文向大家介绍双向链表和双向循环链表?相关面试题,主要包含被问及双向链表和双向循环链表?时的应答技巧和注意事项,需要的朋友参考一下 双向链表: 包含两个指针,一个prev指向前一个节点,一个next指向后一个节点。 双向循环链表: 最后一个节点的 next 指向head,而 head 的prev指向最后一个节点,构成一个环。

  • 我在NodeJS项目中使用Promises,希望更好地理解Promise.chains。 我有一个公开的功能: 主库函数,我希望我的用户调用。它将返回一个promise,然后用户需要处理解决和拒绝的问题。 这个主库函数将调用许多其他库函数,我想链接这些函数。因此,这些函数中的每一个都将返回如下promise: 每一个都将返回一个promise,可以是拒绝,也可以是解决。我想要的是,如果任何库函数拒

  • 主要内容:双向链表的创建目前我们所学到的 链表,无论是动态链表还是 静态链表,表中各节点中都只包含一个指针(游标),且都统一指向直接后继节点,通常称这类链表为 单向链表(或 单链表)。 虽然使用单链表能 100% 解决逻辑关系为 "一对一" 数据的存储问题,但在解决某些特殊问题时,单链表并不是效率最优的存储结构。比如说,如果算法中需要大量地找某指定结点的前趋结点,使用单链表无疑是灾难性的,因为单链表更适合 "从前往后"

  • 链表作为数组之外的一种常用序列抽象, 是大多数高级语言的基本数据类型, 因为 C 语言本身不支持链表类型, 大部分 C 程序都会自己实现一种链表类型, Redis 也不例外 —— 实现了一个双端链表结构。 双端链表作为一种常见的数据结构, 在大部分的数据结构或者算法书里都有讲解, 因此, 这一章关注的是 Redis 双端链表的具体实现, 以及该实现的 API , 而对于双端链表本身, 以及双端链表