- 新しいリンクリストのヘッドノードを作成します。
- 元のリンクリストのノードを順番に処理します。
- 各ノードのデータをコピーし、新しいノードを作成します。
- 新しいノードを新しいリンクリストに連結します。
以下に、この手順を実装したサンプルコードを示します。
#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言語でリンクリストを簡単にコピーすることができます。コピーしたいリンクリストがある場合は、上記の手順を参考にしてください。