0

所以

如果我有一个队列

a --> b --> NULL; 

当我使用一个函数时

void duplicate(QueueNodePtr pHead, QueueNodePtr *pTail)

它会给

a --> a --> b --> b --> NULL

我无法通过仅参考尾巴进行排序来绕过我的头脑。

我能做的就是

a --> b --> a --> b --> NULL

你会如何处理这个?

基本代码很好,但我需要的是提示,

谢谢!

4

3 回答 3

0

如果您可以找出队列中的元素数(N),那么您可以简单地执行以下操作:

for i = 1 to N
  e = remove(queue)
  insert(queue, e)
  insert(queue, e)

您将使用队列操作复制每个元素。

如果您想直接操作数据,那么它不再是一个队列——它是一个(链接的)列表。

于 2013-02-17T00:00:22.810 回答
0

您不能从队列中弹出项目并将它们两次推送到新队列中吗?

编辑:如果您需要原始队列来存储结果,是什么阻止您从临时队列中弹出这些项目并将其推回原始队列。

于 2013-02-17T00:01:03.893 回答
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);

}

于 2013-02-17T00:12:24.357 回答