155. 最小栈

image.png

1.底层使用链表,每个链表头部节点都存储当前结构里的最小值。

  1. public class MinStack {
  2. Node head;
  3. public MinStack() {
  4. }
  5. public void push(int val) {
  6. if (head == null) {
  7. head = new Node(val, val);
  8. } else {
  9. Node node = new Node(val, Math.min(val, head.min), head);
  10. head = node;
  11. }
  12. }
  13. public void pop() {
  14. head = head.next;
  15. }
  16. public int top() {
  17. return head.val;
  18. }
  19. public int getMin() {
  20. return head.min;
  21. }
  22. private class Node {
  23. int val;
  24. int min;
  25. Node next;
  26. public Node(int val, int min, Node next) {
  27. this.val = val;
  28. this.min = min;
  29. this.next = next;
  30. }
  31. public Node(int val, int min) {
  32. this.val = val;
  33. this.min = min;
  34. }
  35. }
  36. }