你绝对不知道的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:
			

这样就可以啦。

猜你喜欢

转载自blog.csdn.net/csdnerM/article/details/118525351