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

アイテムをキューからポップして、新しいキューに 2 回プッシュすることはできませんか?

編集:結果を保存するために元のキューが必要な場合、それらのアイテムを一時キューからポップして元のキューにプッシュするのを妨げているのは何ですか。

于 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 に答える