剑指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;
    }
}
 
posted @ 2018-07-27 13:41  buptyuhanwen  阅读(96)  评论(0编辑  收藏  举报