日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

左神算法:用递归函数和栈逆序一个栈(Java版)

發布時間:2024/2/28 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 左神算法:用递归函数和栈逆序一个栈(Java版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

一個棧依次壓入1,2,3,4,5,那么從棧頂到棧底分別為5,4,3,2,1。將這個棧轉置后,從棧頂到棧底為1,2,3,4,5,也就是實現棧中元素的逆序,但是只能用遞歸函數來實現,不能用其他數據結構。

題解

題源:《程序員代碼面試指南》

import java.util.Scanner; import java.util.Stack;public class Main {public static void main(String[] args) {// 輸入Scanner sc = new Scanner(System.in);int total = sc.nextInt();Stack<Integer> stack = new Stack<>();for (int i = 0; i < total; i++) {stack.push(sc.nextInt());}// 翻轉reverse(stack);// 輸出(翻轉后的棧無法直接從棧底輸出,為了達到效果,借助另一個棧輸出)Stack<Integer> out = new Stack<>();for (int i = 0; i < total; i++) {out.push(stack.pop());}for (int i = 0; i < total; i++) {System.out.print(out.pop() + " ");}}/*** 遞歸獲取并刪除棧底元素*/public static int getAndRemoveLast(Stack<Integer> stack) {int res = stack.pop();if (stack.isEmpty()) {return res;} else {int last = getAndRemoveLast(stack);stack.push(res);return last;}}/*** 遞歸實現棧的翻轉*/public static void reverse(Stack<Integer> stack) {if (stack.isEmpty()) return;int i = getAndRemoveLast(stack); // 獲取并刪除棧底元素reverse(stack);stack.push(i); // 將原有棧底元素重新壓入翻轉之后的棧} }

附:書上配套代碼

package chapter_1_stackandqueue;import java.util.Stack;public class Problem_03_ReverseStackUsingRecursive {public static void reverse(Stack<Integer> stack) {if (stack.isEmpty()) {return;}int i = getAndRemoveLastElement(stack);reverse(stack);stack.push(i);}public static int getAndRemoveLastElement(Stack<Integer> stack) {int result = stack.pop();if (stack.isEmpty()) {return result;} else {int last = getAndRemoveLastElement(stack);stack.push(result);return last;}}public static void main(String[] args) {Stack<Integer> test = new Stack<Integer>();test.push(1);test.push(2);test.push(3);test.push(4);test.push(5);reverse(test);while (!test.isEmpty()) {System.out.println(test.pop());}}}

總結

以上是生活随笔為你收集整理的左神算法:用递归函数和栈逆序一个栈(Java版)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。