C队列,按排序顺序复制元素

时间:2013-02-16 23:47:30

标签: c queue

所以

如果我有队列

a --> b --> NULL; 

当我使用函数时

void duplicate(QueueNodePtr pHead, QueueNodePtr *pTail)

它会给出

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

我只能通过尾巴参考排序来解决问题。

我所能做的只是

a --> b --> a --> b --> NULL
你会怎么做到这一点?

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

谢谢!

3 个答案:

答案 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);

}