Java链表头插法实现无输出,请求排查代码错误
问题排查与修复
核心错误原因
你代码里的insertStart方法接收了一个ListNode head参数,而Java是值传递——方法内部的head是外部传入变量的副本,你在方法里修改这个局部head的指向,根本不会影响Operations类里定义的静态head变量。每次调用insertStart后,类的静态head始终是null,所以display方法的循环不会执行,自然没有输出。
另外display方法里用System.out.println会让每个节点数据和箭头单独换行,体验不好,建议改成System.out.print。
修复方案(两种可选)
方案一:移除方法参数,直接使用类的静态head
既然类里已经定义了静态head,没必要再把它作为参数传入方法,直接在方法里操作这个静态变量即可:
class ListNode{ int data; ListNode next; ListNode(int data) { this.data = data; this.next = null; } } class Operations{ static ListNode head = null; void insertStart(int num) { ListNode temp = new ListNode(num); if (head == null) { head = temp; } else{ temp.next = head; head = temp; } } void display(){ ListNode temp = head; while (temp != null) { System.out.print(temp.data + "->"); temp = temp.next; } // 最后输出null表示链表结束 System.out.println("null"); } public static void main(String[] args) { Operations l1 = new Operations(); l1.insertStart(5); l1.insertStart(4); l1.insertStart(3); l1.insertStart(2); l1.insertStart(1); l1.display(); } }
方案二:让insertStart返回修改后的head,重新赋值给静态变量
如果想保留参数传递的方式,需要让方法返回更新后的head,然后在main里把静态head重新赋值:
class ListNode{ int data; ListNode next; ListNode(int data) { this.data = data; this.next = null; } } class Operations{ static ListNode head = null; ListNode insertStart(int num, ListNode head) { ListNode temp = new ListNode(num); if (head == null) { head = temp; } else{ temp.next = head; head = temp; } return head; } void display(ListNode head){ ListNode temp = head; while (temp != null) { System.out.print(temp.data + "->"); temp = temp.next; } System.out.println("null"); } public static void main(String[] args) { Operations l1 = new Operations(); head = l1.insertStart(5,head); head = l1.insertStart(4, head); head = l1.insertStart(3, head); head = l1.insertStart(2, head); head = l1.insertStart(1, head); l1.display(head); } }
运行结果
两种方案运行后都会输出:
1->2->3->4->5->null
内容的提问来源于stack exchange,提问作者BeginnerCoder
相关产品推荐
相关产品推荐

