链表节点重复连接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; } }
代码说明
- 边界处理:提前处理空链表或
n≤1的情况,避免无效操作。 - 记录原链表末尾:先遍历找到原链表的真实末尾,后续每次拼接都基于这个位置延伸。
- 复制节点拼接:循环
n-1次(原链表已算1份),每次复制原链表的所有节点,将新节点链接到当前链表的末尾,确保生成的是线性的重复链表,而非循环结构。
内容的提问来源于stack exchange,提问作者hyo
相关产品推荐
相关产品推荐

