如何使用另外一个简单队列(FIFO)来反转简单队列(FIFO)?

时间:2019-01-31 17:23:35

标签: data-structures queue

让我们按顺序包含元素1,2,3,4的第一个Queue,以便第一个Queue成为1,2,3,4的前面是1,后面是4。我们还有一个空队列,包含零个元素。我们如何使用另一个空的队列来反转第一个队列? (我们不能使用第三个队列进行倒车)。

我尝试使用另外一个队列来反转队列,但是我的大脑中没有解决方案。

所以我希望Queue被反转,以便反转后第一个Queue元素变为4,3,2,1。

1 个答案:

答案 0 :(得分:0)

from tqdm import tqdm

def rotate(q, k):
    move(q, q, k)

def move(q1, q2, k):
    for i in range(k):
        q2.append(q1.pop(0))


def reverse(q1):
    q2 = []
    for i in range(1, len(q1)):
        move(q1, q2, len(q1) - i)
        rotate(q2, len(q2) - 1)
        move(q2, q1, len(q2))
        rotate(q1, i + 1)

    return q1


if __name__ == '__main__':

    for i in tqdm(range(1000)):
        rq =  reverse(range(i))
        assert rq == range(i)[::-1]