【发布时间】:2021-10-22 03:08:54
【问题描述】:
我在 Leetcode 上发现了这个使用链表实现堆栈的解决方案,我理解了它背后的几乎所有逻辑,除了最小部分。谁能解释一下代码是如何在弹出第一个最小元素后继续跟踪最小元素的?
代码
class MinStack {
private Node head;
public void push(int x) {
if (head == null)
head = new Node(x, x, null);
else
head = new Node(x, Math.min(x, head.min), head);
}
public void pop() {
head = head.next;
}
public int top() {
return head.val;
}
public int getMin() {
return head.min;
}
private class Node {
int val;
int min;
Node next;
private Node(int val, int min, Node next) {
this.val = val;
this.min = min;
this.next = next;
}
}
}
【问题讨论】:
-
也许我误解了实现,但它似乎不起作用(Ideone demo)。
-
@Turing85 您使用的测试代码从推送
0开始并从那里递增,因此最小值始终为0。 -
@TimMoore 我知道。但我通常希望数据结构在内部组织值(如最小堆)。但话又说回来:也许我误解了实施。如果没有明确的问题陈述,就很难知道数据结构的确切要求是什么。
-
它不是按最小元素排序,它只是跟踪最小值。
标签: java linked-list stack