问题
编写一个可迭代的Stack用例,它含有一个静态的copy()方法,接受一个字符串的栈作为参数并返回该栈的一个副本。
解决思路
由于栈的迭代器是逆向的迭代器,实现时需要注意方向问题。
代码
在Stack中添加如下方法:
public static <T> Stack<T> copy(Stack<T> s)
{
Iterator<T> it = s.iterator();
Stack<T> result = new Stack<T>();
Stack<T> temp = new Stack<T>();
while (it.hasNext()) {
temp.push(it.next());
}
it = temp.iterator();
while (it.hasNext()) {
result.push(it.next());
}
return result;
}
测试代码:
/**
* Description :
* Author : mn@furzoom.com
* Date : Oct 20, 2016 2:41:24 PM
* Copyright (c) 2013-2016, http://furzoom.com All Rights Reserved.
*/
package com.furzoom.lab.algs.ch103;
/**
* ClassName : E10312 <br>
* Function : TODO ADD FUNCTION. <br>
* date : Oct 20, 2016 2:41:24 PM <br>
*
* @version
*/
public class E10312
{
public static void main(String[] args) {
Stack<String> s1 = new Stack<String>();
s1.push("first");
s1.push("second");
s1.push("third");
Stack<String> s2 = Stack.copy(s1);
while (!s2.isEmpty()) {
System.out.println(s2.pop());
}
}
}
结果:
third
second
first
算法-第四版-1.3 背包、队列和栈-习题索引汇总
算法-第四版习题索引汇总
|