응용 프로그램 시나리오의 자바 스택 스택

스택 기능 : 마지막 아웃 

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 문법 검사기 충족 시나리오이다

게시 25 개 원래 기사 · 원의 찬양 (51) ·은 20000 +를 볼

추천

출처blog.csdn.net/Royal_lr/article/details/88734320