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

链表节点重复连接n次时陷入死循环问题求助

链表重复连接时的死循环问题解决

问题原因分析

你的代码在第二次for循环时触发死循环,核心问题在于:

  • 第一次循环中,iter遍历到原链表末尾后,执行iter.next = head,直接将链表变成了循环链表(末尾节点指向头节点)。
  • 第二次进入for循环时,iter仍指向原末尾节点,而它的next此时是头节点(永远不为null),导致while(iter.next != null)无限循环,永远无法退出。
  • 此外,原逻辑的设计误区:直接将头节点接到末尾并不会复制节点,只是形成循环链表,根本无法实现“重复连接n次、复制节点”的预期效果。

正确实现方案

要实现将原链表的节点内容重复拼接n次(生成n份原链表的连续结构),需要复制原链表的节点,而非直接复用原节点形成循环。以下是修正后的代码:

class Solution<E> {
    public Node<E> reproduceByN(Node<E> head, int n) {
        // 边界处理:空链表或无需重复时直接返回
        if (head == null || n <= 1) {
            return head;
        }

        // 先找到原链表的原始末尾节点
        Node<E> originalTail = head;
        while (originalTail.next != null) {
            originalTail = originalTail.next;
        }

        Node<E> currentTail = originalTail;

        // 循环n-1次,每次复制原链表并拼接到当前链表末尾
        for (int i = 1; i < n; i++) {
            Node<E> iter = head;
            // 逐个复制原链表的节点
            while (iter != null) {
                Node<E> newNode = new Node<>(iter.data); // 需确保Node类有对应构造方法
                currentTail.next = newNode;
                currentTail = newNode;
                iter = iter.next;
            }
        }

        return head;
    }
}

// 配套的Node类定义(需确保项目中存在)
class Node<E> {
    E data;
    Node<E> next;

    public Node(E data) {
        this.data = data;
        this.next = null;
    }
}

代码说明

  1. 边界处理:提前处理空链表或n≤1的情况,避免无效操作。
  2. 记录原链表末尾:先遍历找到原链表的真实末尾,后续每次拼接都基于这个位置延伸。
  3. 复制节点拼接:循环n-1次(原链表已算1份),每次复制原链表的所有节点,将新节点链接到当前链表的末尾,确保生成的是线性的重复链表,而非循环结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:00:21