所以
如果我有队列
a --> b --> NULL;
当我使用函数时
void duplicate(QueueNodePtr pHead, QueueNodePtr *pTail)
它会给出
a --> a --> b --> b --> NULL
我只能通过尾巴参考排序来解决问题。
我所能做的只是
a --> b --> a --> b --> NULL
你会怎么做到这一点?
基本代码很好,但我需要的是提示,
谢谢!
答案 0 :(得分:0)
如果您可以找到队列中的元素数量(N),那么您可以简单地执行以下操作:
for i = 1 to N
e = remove(queue)
insert(queue, e)
insert(queue, e)
您将使用队列操作重复每个元素。
如果你想直接操纵数据,那么它就不再是一个队列 - 它是一个(链接的)列表。
答案 1 :(得分:0)
你不能从队列中弹出项目并将它们两次推入新队列吗?
编辑:如果您需要原始队列来存储结果,那么是什么阻止您从临时队列中弹出这些项目并推回原始队列。
答案 2 :(得分:0)
我在下面有一个简短的伪代码,试图实现你的目标
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);
}