剑指offer---20---包含min函数的栈
题意
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
分析
---首先,自定义一个栈,栈内部使用ListNode链表来实现,同时维护一个length长度。
---其次,在栈中为了实现min,需要定义两个栈,其中一个栈专门用来保存最小的值。
代码
import java.util.Stack;
public class Solution {
private MyStack<Integer> minStack = new MyStack<Integer>();
private MyStack<Integer> dataStack = new MyStack<Integer>();
public void push(int node) {
dataStack.push(node);
if(minStack.length==0)minStack.push(node);
else{
if(minStack.head.data<node)minStack.push(minStack.head.data);
else minStack.push(node);
}
}
public void pop() {
ListNode<Integer> temp = dataStack.head;
dataStack.head = dataStack.head.nextNode;
ListNode<Integer> min = minStack.head;
minStack.head = minStack.head.nextNode;
}
public int top() {
return dataStack.head.data;
}
public int min() {
return minStack.head.data;
}
}
//使用泛型去定义节点和栈,内部使用链表和头结点。
class ListNode<K>{
K data;
ListNode<K> nextNode;
}
class MyStack<K>{
public ListNode<K> head;
public int length;
public void push(K data){
ListNode<K> node = new ListNode<K>();
node.data = data;
node.nextNode = head;
head = node;
length++;
}
public K pop(){
if(head==null)return null;
ListNode<K> temp = head;
head = head.nextNode;
length--;
return temp.data;
}
}