前言
栈这种数据结构的特性我就不多说了,有需要的朋友可以看我之前的文章:
栈的学习
这几天学习了java集合,今天在LeetCode OJ做题恰好需要用到stack这种数据数据结构,在java里可以用LinkedList模拟,这里介绍一下
方法
java的泛型可以让LinkedList模拟存储各种数据类型的栈,包括int,double,String,Object等等,介绍一下几种用到的API接口:
入栈
void addFirst(E e); // 将指定元素插入此列表的开头
获取栈顶元素
E getFirst(); // 返回此列表的第一个元素
出栈
E removeFirst(); // 移除并返回此列表第一个元素
判栈空
boolean isEmpty(); // 判断栈空
示例代码
import java.util.LinkedList;
import java.util.NoSuchElementException;
public class SimulateStack {
private LinkedList<Integer> stack = new LinkedList<Integer>();
public boolean isEmpty() {
return this.stack.isEmpty();
}
public void push(int data) {
this.stack.addFirst(data);
}
public int pop() throws NoSuchElementException{
return this.stack.removeFirst();
}
public int getTop() throws NoSuchElementException{
return this.stack.getFirst();
}
public static void main(String args[]) {
SimulateStack s = new SimulateStack();
s.push(1);
s.push(2);
s.push(3);
while (! s.isEmpty()) {
int data = s.getTop();
System.out.println(data);
s.pop();
}
}
}
中序遍历二叉树
import java.util.ArrayList;
import java.util.LinkedList;
public class BinaryTreeInorderTraversal {
static class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int x) {
this.val = x;
}
}
/**
* 二叉树中序遍历
*
* @param root
* @return
*/
public ArrayList<Integer> inorderTraversal(TreeNode root) {
LinkedList<TreeNode> stack = new LinkedList<TreeNode>();
ArrayList<Integer> list = new ArrayList<Integer>();
TreeNode p = root;
while (!stack.isEmpty() || p != null) {
if (p != null) {
stack.addFirst(p);
p = p.left;
} else {
p = stack.removeFirst();
list.add(p.val);
p = p.right;
}
}
return list;
}
}