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

Java实现Doubly Linked List打印时无输出且程序持续运行问题求助

问题原因

核心问题是addLast方法的节点指向逻辑混乱,混用了哨兵节点和非哨兵节点的实现思路,最终导致链表出现环形引用,打印方法进入死循环:

  • 构造函数中初始化了两个空的哨兵节点作为初始head和tail,但后续添加元素时直接修改了head和tail的指向,破坏了哨兵节点的设计逻辑
  • 创建新节点时错误地将新节点的myNext指向了当前的tail节点,第二次添加元素后,最后一个节点的next指向了前一个节点,前一个节点的next又指向最后一个节点,形成循环,displayList的while循环永远无法终止
  • 首次添加元素的指针赋值逻辑错误,没有正确处理首尾节点的前后指向关联
修复方案

这里提供两种常用实现方案,二选一即可:

方案1:不使用哨兵节点(实现更简单)

  1. 修改构造函数,直接将首尾指针初始化为null
public Box() {
    head = null;
    tail = null;
    size = 0;
}
  1. 修正addLast的节点指向逻辑
public void addLast(E data) {
    // 新节点前指针指向旧尾节点,后指针初始为null
    DoubleListNode<E> newNode = new DoubleListNode<>(tail, data, null);
    if(size == 0) {
        // 空链表时首尾都指向新节点
        head = newNode;
    } else {
        // 非空时旧尾节点的后指针指向新节点
        tail.myNext = newNode;
    }
    tail = newNode;
    size++;
}
  1. 优化displayList的空链表处理逻辑
public void displayList() {
    if (size == 0) {
        System.out.println("Empty List");
        return;
    }
    DoubleListNode<E> temp = head;
    while (temp != null) {
        System.out.print(temp.myData + " --> ");
        temp = temp.myNext;
    }
    System.out.println("Null");
}

方案2:使用哨兵节点(边界处理更统一)

  1. 修改构造函数,初始化首尾哨兵节点并建立关联
public Box() {
    head = new DoubleListNode<>();
    tail = new DoubleListNode<>();
    // 两个哨兵节点互相指向,中间存储数据节点
    head.myNext = tail;
    tail.myPrev = head;
    size = 0;
}
  1. 修正addLast的插入逻辑,永远插在尾哨兵前面
public void addLast(E data) {
    DoubleListNode<E> newNode = new DoubleListNode<>(tail.myPrev, data, tail);
    tail.myPrev.myNext = newNode;
    tail.myPrev = newNode;
    size++;
}
  1. 修正displayList的遍历逻辑,跳过首尾哨兵
public void displayList() {
    if (size == 0) {
        System.out.println("Empty List");
        return;
    }
    DoubleListNode<E> temp = head.myNext;
    while (temp != tail) {
        System.out.print(temp.myData + " --> ");
        temp = temp.myNext;
    }
    System.out.println("Null");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:39:02