Java自定义整型链表reverse方法仅输出头节点问题如何修复
问题修复方案
核心问题分析
你的代码出现反转后仅输出头节点、功能不符合要求的问题,原因有三个:
- 原地反转逻辑未更新头节点:你当前写的reverse方法是原地修改链表指向,反转完成后
previous变量是新的头节点,但你没有将它赋值给this.head,导致链表头还是原来的第一个节点,而这个节点的next已经被设为null,所以toString只会输出这一个节点。 - 不符合「返回逆序拷贝」的需求:当前reverse方法直接修改原链表的节点指向,会破坏原链表的结构,没有生成新的拷贝。
- 测试逻辑分支不匹配:main方法里打印的菜单选项是1、2,但是switch判断的是11、12,输入对应数字不会触发预期逻辑。
修复代码
1. 先添加无参构造方法
因为生成逆序拷贝需要新建空的链表对象,在类里添加如下构造:
public LinkedListOfInts() { }
2. 替换reverse方法实现
下面的实现会生成全新的逆序链表,不会修改原链表内容,符合要求:
public LinkedListOfInts reverse() { LinkedListOfInts reversedList = new LinkedListOfInts(); Node current = this.head; // 遍历原链表,把每个节点的值插到新链表的头部,天然形成逆序 while (current != null) { reversedList.addToFront(current.value); current = current.nextNode; } return reversedList; }
3. 修正main方法的分支判断
把switch里的case值改成和菜单提示一致即可:
switch (input.nextInt()) { case 1: System.out.println("Reverse the List"); System.out.println(copy.reverse()); break; case 2: System.out.println("toString"); System.out.println(list.toString()); break; }
如果你需要保留原地反转的逻辑(不生成拷贝),只需要在原来的reverse方法while循环结束后添加一行this.head = previous;即可解决仅输出头节点的问题。
内容的提问来源于stack exchange,提问作者user16854661
相关产品推荐
相关产品推荐

