题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pushV int整型一维数组
* @param popV int整型一维数组
* @return bool布尔型
*/
public boolean IsPopOrder (int[] pushV, int[] popV) {
if(pushV.length == 1){
return pushV[0] == popV[0];
}
boolean result = false;
Stack stack = new Stack();
Set<Integer> stackSet = new HashSet<>(pushV.length);
int pushCount = 0;
int popCount = 0;
//第一次入栈
push(stack,stackSet,pushV[pushCount++]);
while(true){
if(pushCount <= 1000 && popCount <= pushCount && stackSet.contains(popV[popCount])){
int popValue = stack.top();
if(popValue == popV[popCount]){
stack.pop();
popCount++;
}else{
result = false;
break;
}
}else{
if(pushCount == pushV.length && popCount < pushCount){
result = false;
break;
}
push(stack,stackSet,pushV[pushCount++]);
}
if(pushCount == popCount && popCount == pushV.length){
result = true;
break;
}
}
return result;
}
public static void push(Stack stack,Set<Integer> stackSet,int value){
stack.push(value);
stackSet.add(value);
}
public static class Stack{
private Node head;
private Node tail;
private int length = 0;
public void push(int value){
length++;
if(head == null){
head = new Node(value);
head.next = null;
tail = head;
}else{
Node next = head;
head = new Node(value);
head.next = next;
}
}
public int pop(){
if(length == 0){
return -1;
}else{
length--;
int popValue = head.value;
head = head.next;
return popValue;
}
}
public int top(){
if(length == 0){
return -1;
}else{
int popValue = head.value;
return popValue;
}
}
}
public static class Node{
private int value;
private Node next;
public Node(int value){
this.value = value;
}
public void setValue(int value){
this.value = value;
}
public int getValue(){
return value;
}
public void setNext(Node next){
this.next = next;
}
public Node getNext(){
return next;
}
}
}
#java##入栈##出栈#
