题目:使用栈在队列上实现以下操作:push(x)--将一个元素放在队列的末尾。pop()——从队列头部移除一个元素。peek()--返回队列头部的元素。empty()--返回队列是否为空。使用stacks.push(x)实现队列的以下操作--将元素x推到queue.pop()的后面--从queue.peek()前面移除元素。peek()--获取前面的元素.empty()--返回队列是否为空。示例:MyQueuequeue=newMyQueue();queue.push(1);queue.push(2);队列.peek();//返回1queue.pop();//返回1queue.empty();//返回false表示:你只能使用标准栈操作——也就是说,只有pushtotop,peek/popfromtop,size,andisempty操作是合法的。您的语言可能不支持堆栈。可以用list或者deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。假定所有操作都是有效的(例如,空队列不会调用pop或peek)。注意:您必须仅使用堆栈的标准操作——这意味着只有推送到顶部、从顶部查看/弹出、大小和为空操作才有效。根据您的语言,堆栈可能不受本地支持。你可以用list或者deque(双端队列)来模拟一个栈,只要你只使用栈的标准操作即可。您可以假设所有操作都是有效的(例如,不会在空队列上调用弹出或查看操作)。解题思路:队列是先进先出,栈是后进先出。用一个栈实现一个队列,可以用两个栈来完成解决。入队时,使用stack1存放节点,出队时,stack1中的节点依次出栈,压入stack2。比如元素1、2、3依次放入队列,存入stack1:[1,2,3]出队时,顺序应该是:1->2->3,但是出栈在前in,firstout,入栈顺序为:3->2->1,与出队顺序不符。使用另一个栈stack2stack1中的元素弹出并压入stack2stack1:[1,2,3]--->stack2:[3,2,1]此时,stack2弹出顺序:1->2->3与出队顺序一致注意:出队时不需要急于将stack1中的节点顺序压入stack2。因为要实现的队列是先进后出的,所以可以把stack2中的所有节点pop,然后把stack1中的节点按顺序push到stack2中,这样出栈的时间复杂度就可以摊到O(1).Java:类MyQueue{privateStack
