你绝对不知道的java栈stack小细节
今天刷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:
这样就可以啦。