題目
複製棧。爲基於鏈表實現的棧編寫一個新的構造函數,使以下代碼
Stack<Item> t=new Stack<Item>(s);
得到的t指向棧s的一個新的獨立的副本。
思路
因爲棧是後入先出,所以在複製棧的時候,要聲明一箇中轉棧來實現翻轉原來的棧,再把中轉棧裏的元素每個都push到原來的棧和新棧。也可以使用實現迭代器的Stack的foreach方法(foreach只是操作數據)。
代碼
方法一
public E42(E42 s)
{
E42 temp = new E42();
int maxsize = s.size();
for (int i = 0; i < maxsize; i++)
temp.push(s.pop());
for (int i = 0; i < maxsize; i++)
{
Item item = (Item) temp.pop();
s.push(item);
this.push(item);
}
}
方法二
public Stack(Stack<Item> s)
{
Stack<Item> temp = new Stack<Item>();
for(Item i:s)
{
temp.push(i);
}
for(Item i:temp)
{
this.push(i);
}
}