今天刷leetcode的时候发现一个问题:
题目:
//输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
//
//
//
// 示例 1:
//
// 输入:head = [1,3,2]
//输出:[2,3,1]
我写的答案:
class Solution {
public int[] reversePrint(ListNode head) {
Stack<ListNode> stack = new Stack<ListNode>();
while (head != null) {
stack.push(head);
head = head.next;
}
int[] print = new int[stack.size()];
for (int i = 0; i < stack.size(); i++) {
print[i] = stack.pop().val;
}
return print;
}
}
运行结果:
info
运行成功:
测试用例:[1,3,2]
测试结果:[2,3,0]
期望结果:[2,3,1]
stdout:
为什么最后一个数是零呢?
点进size()方法一看:
public synchronized int size() {
return elementCount;
}
好家伙!!有个锁:synchronized
这就导致了最后一个数弹不出来
解决方法:
int size = stack.size();
int[] print = new int[size];
for (int i = 0; i < size; i++) {
print[i] = stack.pop().val;
}
提前拿出长度,结果:
info
运行成功:
测试用例:[1,3,2]
测试结果:[2,3,1]
期望结果:[2,3,1]
stdout:
这样就可以啦。
本文记录了在LeetCode上遇到的一个问题,涉及链表操作和栈的应用。在尝试从尾到头逆序返回链表节点值时,由于使用了同步的`size()`方法导致最后一个元素无法正确获取。解决方案是先获取栈的大小,然后在循环中依次弹出节点值。通过修改代码,成功解决了这个问题,实现了预期的功能。
693

被折叠的 条评论
为什么被折叠?



