C言語でリンクリストのコピーを作成する方法


  1. 新しいリンクリストのヘッドノードを作成します。
  2. 元のリンクリストのノードを順番に処理します。
  3. 各ノードのデータをコピーし、新しいノードを作成します。
  4. 新しいノードを新しいリンクリストに連結します。

以下に、この手順を実装したサンプルコードを示します。

#include <stdio.h>
#include <stdlib.h>
// リンクリストのノードを表す構造体
typedef struct Node {
    int data;
    struct Node* next;
} Node;
// リンクリストをコピーする関数
Node* copyLinkedList(Node* head) {
    // 新しいリンクリストのヘッドノードを作成
    Node* newHead = NULL;
    Node* tail = NULL;
    // 元のリンクリストを順番に処理
    Node* current = head;
    while (current != NULL) {
        // 新しいノードを作成
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->data = current->data;
        newNode->next = NULL;
        // 新しいノードを新しいリンクリストに連結
        if (newHead == NULL) {
            newHead = newNode;
            tail = newNode;
        } else {
            tail->next = newNode;
            tail = newNode;
        }
        current = current->next;
    }
    return newHead;
}
// リンクリストを表示する関数
void printLinkedList(Node* head) {
    Node* current = head;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}
int main() {
    // サンプルのリンクリストを作成
    Node* head = (Node*)malloc(sizeof(Node));
    Node* second = (Node*)malloc(sizeof(Node));
    Node* third = (Node*)malloc(sizeof(Node));
    head->data = 1;
    head->next = second;
    second->data = 2;
    second->next = third;
    third->data = 3;
    third->next = NULL;
    // 元のリンクリストを表示
    printf("元のリンクリスト: ");
    printLinkedList(head);
    // リンクリストをコピー
    Node* copiedHead = copyLinkedList(head);
    // コピーしたリンクリストを表示
    printf("コピーしたリンクリスト: ");
    printLinkedList(copiedHead);
    return 0;
}

このコードでは、copyLinkedList関数でリンクリストをコピーしています。printLinkedList関数は、リンクリストの内容を表示するために使用されます。

上記のコードを実行すると、元のリンクリストとコピーしたリンクリストが表示されます。これにより、元のリンクリストが正常にコピーされたことが確認できます。

この方法を使用すると、C言語でリンクリストを簡単にコピーすることができます。コピーしたいリンクリストがある場合は、上記の手順を参考にしてください。