Java技术疑问:未声明null的指针指向何方?反转链表代码问题
Java 常见问题解答
问题1:Java中未显式赋值的引用类型变量指向哪里?
首先得纠正个小细节:Java里其实没有“指针”的概念,我们通常说的是引用类型变量~
情况分两种:
- 如果是类的成员变量(在方法外定义的变量):引用类型变量默认会被初始化为
null,也就是不指向任何对象。 - 如果是局部变量(在方法/代码块里定义的变量):Java要求局部变量必须显式初始化才能使用,要是你没给它赋值就直接用,连编译都通不过,更别说运行了。
问题2:反转链表代码中去掉track.next = null后,track.next指向何处?
咱们先一步步拆解你的代码逻辑,就能清楚看到问题所在:
假设原链表是 1 -> 2 -> 3 -> null:
- 你把每个节点依次压入栈,栈内从底到顶的顺序是
[1, 2, 3]。 - 弹出节点拼接新链表时:先弹出3接到
newHead后,track移动到3;接着弹出2,track.next = 2,track移动到2;最后弹出1,track.next = 1,track移动到1。 - 这时候的
track是原链表的头节点1,而它的next指针完全没被修改过,还是保留着原链表中的指向——也就是原链表的第二个节点2。 - 最终新链表的结构会变成
3 -> 2 -> 1 -> 2 -> 1 -> 2...,形成了一个环(1和2互相指向),这也是为什么LeetCode运行会出错的原因。
简单来说,去掉track.next = null后,track.next会指向原链表中head节点的下一个节点,也就是新链表中当前track节点的前一个节点,直接导致链表成环。
内容的提问来源于stack exchange,提问作者Yinghan Ma
相关产品推荐
相关产品推荐

