You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

双向链表两种构造方法对比:自研代码是否具备可行性?

你的双向链表构造方法无法正常运行

你的代码存在关键问题:初始化顺序错误导致指针引用异常,无法形成正确的空链表结构。

问题分析

看你编写的构造方法代码:

public DoublyLinkedList() {
    header = new Node<>(null,null,trailer);
    trailer = new Node<>(null,header,null);
}

当执行第一行header = new Node<>(null,null,trailer);时,trailer变量还未被赋值,此时它是null引用。这意味着header的next指针会被设置为null,而不是后续创建的trailer实例。

第二行创建trailer时,虽然把它的prev指针指向了header,但header的next依然是null,并没有指向trailer。这样双向链表没有形成空链表应有的结构(头尾节点需要互相指向对方),后续执行添加元素、遍历、删除等操作时,会因为指针不完整抛出空指针异常,或者出现逻辑错误。

对比标准实现

教材中的标准实现则是正确的:

public DoublyLinkedList() {
    header = new Node<>(null, null, null);      // create header
    trailer = new Node<>(null, header, null);   // trailer is preceded by header
    header.setNext(trailer);                    // header is followed by trailer
}

它先初始化header,再创建trailer并让其prev指向header,最后显式将header的next设为trailer,确保头尾节点互相引用,形成了正确的空双向链表结构。

修正方案

你可以通过两种方式修正代码:

// 方案一:调整初始化顺序,确保创建header时trailer已存在
public DoublyLinkedList() {
    trailer = new Node<>(null, null, null);
    header = new Node<>(null, null, trailer);
    trailer.setPrev(header);
}

// 方案二:补全header的next指针设置
public DoublyLinkedList() {
    header = new Node<>(null,null,trailer);
    trailer = new Node<>(null,header,null);
    header.setNext(trailer); // 新增这一步,让header的next指向trailer
}

内容的提问来源于stack exchange,提问作者Jiajun Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:31:36