栈
public class LinkStack<T> {
private Node head;
private int N;
public static void main(String[] args) {
String brackets = ")((我是)哈哈";
String left = "(";
String right = ")";
//()匹配问题
LinkStack linkStack = new LinkStack();
for (int i = 0; i < brackets.length(); i++) {
String temp = brackets.charAt(i)+ "";
if (temp.equals(left)){ //判断左括号
linkStack.push(temp);
System.out.println("入 "+linkStack.size());
}else if (temp.equals(right)){ //判断右括号
if (linkStack.size() == 0) {
System.out.println("匹配失败");
return;
}
System.out.println("出 "+linkStack.size());
linkStack.pop();
System.out.println(i+1);
}
}
if (linkStack.size() == 0) { //判断栈里还有无 (
System.out.println("匹配成功");
}else {
System.out.println("匹配失败");
}
}
//结点类
private class Node {
public T item;
public Node next;
public Node(T item, Node next) {
this.item = item;
this.next = next;
}
}
//初始化
public LinkStack() {
this.head = new Node(null, null);
this.N = 0;
}
//判断栈是否为空
public boolean isempty() {
return N == 0;
}
public int size() {
return N;
}
//压栈
public void push(T t) {
//创建oldItem --> head.next = null
Node oldItem = head.next;
//创建新节点
Node newNode = new Node(t, null);
// head 指向 newNode
head.next = newNode;
// newNode --> oldItem =null
newNode.next = oldItem;
N++;
}
//弹栈
public T pop() {
//头结点的下一个(新插入的)
Node oldItem = head.next;
//判断size
if (oldItem == null) {
return null;
}
//head.next 指向 head.next.next
head.next = oldItem.next;
N--;
return oldItem.item;
}
}
2 条评论
文字流畅如丝,语言优美动人,读来令人心旷神怡。
?哲理类评语?