我参加了考试,他们询问了队列。我很想知道如何在不使用头文件的任何私有部分的情况下编写反向方法。因此,必须仅使用文件的公共部分来编写该方法。此外,您无法创建新队列,也无法删除已存在的队列。您不能使用继承,接口等。此方法还需要在O(N)时间复杂度下工作。这太需要了,我无法找到解决方案。
头文件是:
#include <iostream>
using namespace std;
class Queue
{
public:
Queue(); // Class constructor
~Queue(); // Class destuctor
void ClearQueue(); // Remove all items from the queue
bool Enqueue(int newItem); // Enter an item in the queue
int Dequeue(); // Remove an item from the queue
bool isEmpty(); // Return true if queue is empty
private:
struct Node(){
Node *next;
int item;
};
Node *front;
Node *back;
};
//and the prototype of the method wanted :
bool reverse(){
}
答案 0 :(得分:4)
你可以写一个递归函数。将以下函数添加到您的类中:
bool reverse() {
if (this->isEmpty())
return true;
int value = this->Dequeue();
this->reverse();
this->Enqueue(value);
return true;
}
如果您不希望该函数成为类Queue的方法,并且您有一个全局Queue对象queue
,那么您也可以编写一个这样的全局函数:
bool reverse() {
if (queue.isEmpty())
return true;
int value = queue.Dequeue();
queue.reverse();
queue.Enqueue(value);
return true;
}
如果您没有全局Queue对象,则必须将队列作为参数传递,请参阅:
bool reverse(Queue& queue) {
if (queue.isEmpty())
return true;
int value = queue.Dequeue();
queue.reverse(queue);
queue.Enqueue(value);
return true;
}