스택 기능 : 마지막 아웃
1. 단일 체인 K의 수의 역수
public class MyNode {
public Integer value;
public MyNode next;
public MyNode(Integer value) {
this.value = value;
}
@Override
public String toString() {
return "MyNode{" +
"value=" + value +
", next=" + next +
'}';
}
}
MyNode node=new MyNode(1);
MyNode temp=node;
for(int i=2;i<11;i++){
MyNode nodeNext=new MyNode(i);
temp.next=nodeNext;
temp=nodeNext;
}
int val= getSingleListLastKNum(node,4);
System.out.println(val);
public static int getSingleListLastKNum(MyNode node,int k){
Stack<MyNode> stacks=new Stack<>();
while(node!=null){
stacks.push(node);
node=node.next;
}
MyNode target=null;
int size=stacks.size();
while(stacks.size()>0){
target=stacks.pop();
int subSize=stacks.size();
if(size-subSize==k){
break;
}
}
return target.value;
}
아이디어는리스트에 적재 한 다음 수의 역수의 K K 소자의 스택으로부터 제거하는 것이다.
이것은 이중 포인터의 질문에 최적의 솔루션입니다, 여기 링크 : https://www.cnblogs.com/edisonchou/p/4769164.html
2. 단일 목록, 그것은 회문 여부를 결정
MyNode node=new MyNode(1);
MyNode temp=node;
int j=1;
for(int i=2;i<10;i++){
int val=i;
if(i>5){
val=i-2*j;
j++;
}
MyNode nodeNext=new MyNode(val);
temp.next=nodeNext;
temp=nodeNext;
}
System.out.println(node);
boolean flag=isPalindromeNum(node);
System.out.println(flag);
public static boolean isPalindromeNum(MyNode node){
boolean flag=true;
MyNode originalNode=node;
Stack<MyNode> stacks=new Stack<>();
while(node!=null){
stacks.push(node);
node=node.next;
}
while(stacks.size()>0){
Integer value=stacks.pop().value;
Integer oriVal=originalNode.value;
if(value!=oriVal){
flag=false;
break;
}
originalNode=originalNode.next;
}
return flag;
}
아이디어는 달리 회문, 회문 번호를 기재하지 직접 밖으로 동일한리스트에 적층 및 숫자가 아닌 경우, 순차적으로 연결리스트의 노드의 값과 비교 스택 엘리먼트로부터 제거하기위한 것이다.
최적의 솔루션이 문제는 포인터의 속도, 여기 링크 : https://blog.csdn.net/whm114336793/article/details/79996943
요약 :
우리는이 두 가지 질문의 일반적인 기능은 링크 된 목록을 반대하는 데 필요한 후 편리 평가 또는 판단을 발견 한 후 스택의 특성에 따라 고급. 따라서, 스택은 예를 들면 논리 처리의 종류로 하강 한 후 사용 객체 또는 장면 임의의 데이터가 필요하다 : 반전 출력하므로 XML 문법 검사기 충족 시나리오이다