【LeetCode OJ 232】Implement Queue using Stacks

2137 ワード

タイトルリンク:https://leetcode.com/problems/implement-queue-using-stacks/
テーマ:Implement the following operations of a queue using stacks.
push(x) -- Push element x to the back of queue.
pop() -- Removes the element from in front of queue.
peek() -- Get the front element.
empty() -- Return whether the queue is empty.
Notes:
You must use only standard operations of a stack -- which means only  push to toppeek/pop from topsize , and  is empty  operations are valid.
Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
問題解決の構想:問題はスタックでキューを実現し、その入キュー、出キューを実現し、キューのヘッダ要素を表示し、キューが空であるかどうかを判断する4つの操作を実現することを要求する.大まかな考え方は,実装キューを2つのスタックでシミュレートし,スタックs 1を記憶空間とし,スタックs 2を一時バッファとする.
エンキュー時:s 1に要素を押し込む
デキュー時:まずs 2が空であるかどうかを判断し、空でない場合はスタックトップ要素を直接ポップアップし、空である場合はs 1の要素を1つずつs 2に注ぎ込み、最後の要素をポップアップしてデキューします.
サンプルコードは次のとおりです.
/**
 *               
 * @author   
 * @date 2016-02-25
 *
 */
public class Solution
{
	Stack<Integer> s1 = new Stack<>();
	Stack<Integer> s2 = new Stack<>();
	// Push element x to the back of queue.
	public void push(int x)
	{
		s1.push(x);

	}
	// Removes the element from in front of queue.
	public void pop()
	{
		if (!s2.empty())
		{
			s2.pop();
		} else if (s1.isEmpty())
		{
			return;
		} else
		{
			while (!s1.isEmpty())
			{
				int temp = s1.pop();
				s2.push(temp);
			}
			s2.pop();
		}
	}
	// Get the front element.
	public int peek()
	{
		if (!s2.isEmpty())
			return s2.pop();

		else if (s1.isEmpty())
		{
			return -1;
		} else
		{
			while (!s1.isEmpty())
			{
				int temp = s1.pop();
				s2.push(temp);
			}
			return s2.peek();
		}
	}
	// Return whether the queue is empty.
	public boolean empty()
	{
		return s1.isEmpty() && s2.isEmpty();
	}
}