【簡單遞歸】之逆序棧

在這裏插入圖片描述
神~經病!
翻來翻去

package com.stack;

import java.util.Scanner;
import java.util.Stack;

/*
 * 用遞歸逆序棧*/
public class RecStack {
	public static void main(String[] args) {
		Stack<Integer> stack = new Stack<>();
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		for (int i = 0; i < n; i++) {
			int num = scanner.nextInt();
			stack.push(num);
		}
		reverse(stack);
		printf(stack);
		scanner.close();
	}

//將棧底元素返回並移除
	public static int getAndRemoveLast(Stack<Integer> stack) {
		int result = stack.pop();
		if (stack.isEmpty()) {
			return result;
		} else {
			int last = getAndRemoveLast(stack);
			stack.push(result);
			return last;
		}
	}

//反轉
	public static void reverse(Stack<Integer> stack) {
		if (stack.isEmpty()) {
			return;
		}
		int i = getAndRemoveLast(stack);
		reverse(stack);
		stack.push(i);
	}

	// 自底向上打印
	public static void printf(Stack<Integer> stack) {
		if (stack.isEmpty()) {
			return;
		}
		int top = stack.pop();
		printf(stack);
		System.out.println(top + " ");
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章