所以
如果我有一个队列
a --> b --> NULL;
当我使用一个函数时
void duplicate(QueueNodePtr pHead, QueueNodePtr *pTail)
它会给
a --> a --> b --> b --> NULL
我无法通过仅参考尾巴进行排序来绕过我的头脑。
我能做的就是
a --> b --> a --> b --> NULL
你会如何处理这个?
基本代码很好,但我需要的是提示,
谢谢!
如果您可以找出队列中的元素数(N),那么您可以简单地执行以下操作:
for i = 1 to N
e = remove(queue)
insert(queue, e)
insert(queue, e)
您将使用队列操作复制每个元素。
如果您想直接操作数据,那么它不再是一个队列——它是一个(链接的)列表。
您不能从队列中弹出项目并将它们两次推送到新队列中吗?
编辑:如果您需要原始队列来存储结果,是什么阻止您从临时队列中弹出这些项目并将其推回原始队列。
我在下面有一个简短的伪代码,它试图实现您的目标
void duplicateQueue(QueueNode *head, QueueNode *tail)
{
QueueNode *curr;
QueueNode *node;
//Initialize curr to head
curr = head
do
{
// Create a new node
node = (QueueNode *) malloc(sizeof(QueueNode));
// Initilaize the node
node->data = curr->data;
// Create link from node to curr->next
node->next = curr->next;
//Create a link from current to new node
curr->next = node;
// move current to next original element
curr = node->next;
}while(curr != NULL);
}