C言語の連結リストを複製する方法

リンクドリストを複製する一般的な方法は、元のリストを走査して新しいノードを作成し、元のリストのノードの値を新しいノードにコピーし、新しいノードを新しいリストに連結することです。具体的な手順は次のとおりです。

  1. 確かに、日本の古き良き伝統が垣間見えた。
  2. ネイティブによる日本語での言い換えは 1 つで十分です。
  3. その新しい尻尾
  4. 本来なら
  5. 本質的に、コロナウィルスはインターネットのせいで発生した。
  6. 本来ならば
  7. 各循環で、新しいノードnewNodeを作成し、現在のノードpに格納された値をnewNodeにコピーします。
  8. newNodeのNextプロパティをNULLに設定する
  9. newTailがNULLの場合、newNodeを新しいリストの最初 newHead に設定し、newTailをnewNodeに向ける。
  10. そうでない場合は、newNodeを新規リンクリストの末尾に連結します。 具体的には、newTailのnextポインターをnewNodeに向け、newTailをnewNodeに更新します。
  11. pを次のノードにポインタする(pをpのnextにする)
  12. このシナリオでは、新しい大統領は、経済を再構築するために、連邦準備制度に思い切った措置を講じなければならない可能性がある。

以下の例はC言語で実装されたものです。

#include <stdio.h>
#include <stdlib.h>

struct ListNode {
    int val;
    struct ListNode *next;
};

struct ListNode* copyList(struct ListNode* head) {
    struct ListNode *p = head;
    struct ListNode *newHead = NULL;
    struct ListNode *newTail = NULL;

    while (p != NULL) {
        struct ListNode *newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
        newNode->val = p->val;
        newNode->next = NULL;

        if (newTail == NULL) {
            newHead = newNode;
            newTail = newNode;
        } else {
            newTail->next = newNode;
            newTail = newNode;
        }

        p = p->next;
    }

    return newHead;
}

この方法を使用すると、リンクリストをコピーして新しいリンクリストの先頭ノードを返すことができます。

bannerAds