我正在学习队列,并完成了队列的链表实现,现在我的任务是递归地反转队列。因此,我尝试弹出第一个元素并调用递归函数,直到队列变为空,并调用push/enqueue操作将元素推回队列。我哪里做错了?
class Node:
def __init__(self,data):
self.data=data
self.next=None
class Queue_LL:
def __init__(self):
self.head=None
self.tail=None
self.count=0
def enqueue(self,item):
temp=Node(item)
if self.tail==None:
self.head=temp
self.tail=temp
self.count += 1
else:
self.tail.next=temp
self.tail=temp
self.count+=1
def dequeue(self):
if not self.head:
return None
else:
dequeue_element=self.head.data
self.head=self.head.next
if self.head==None:#we reached end of queue
self.tail=None
self.count-=1
return dequeue_element
def getFront(self):
if not self.head:
return
else:
return self.head.data
def getRear(self):
if not self.head:
return
else:
return self.tail.data
def size(self):
return self.count
def isEmpty(self):
return self.count==0
def reverse(queue):
if not queue:
temp=queue.dequeue()
reverse(queue)
queue.enqueue(temp)
#driver code
q=Queue_LL()
q.enqueue(20)
q.enqueue(30)
q.enqueue(40)
q.enqueue(50)
print(q.getFront())
print(q.getRear())
print(q.size())
print(q.isEmpty())
#reverse queue
reverse(q)
print(q.getFront())
print(q.getRear())
print(q.size())
print(q.isEmpty())
递归函数错了吗?因为期望的输出是50,20,4,False
在相反的方法中,条件是不正确的,因为if not queue:
总是假的。下面是反向方法的更正版本:
def reverse(queue):
if not queue.isEmpty():
temp=queue.dequeue()
reverse(queue)
queue.enqueue(temp)