В C нет встроенного типа данных "список", но можно создать свою реализацию списка с помощью указателей и динамического выделения памяти. Для того чтобы скопировать список в C, нужно перебрать все элементы и создать новую копию каждого элемента.
Вот пример функции, которая копирует список:
#include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct Node* next; } Node; Node* createNode(int data) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->next = NULL; return newNode; } Node* copyList(Node* head) { if (head == NULL) { return NULL; } Node* newHead = createNode(head->data); Node* current = newHead; Node* oldCurrent = head->next; while (oldCurrent != NULL) { current->next = createNode(oldCurrent->data); current = current->next; oldCurrent = oldCurrent->next; } return newHead; } void printList(Node* head) { Node* current = head; while (current != NULL) { printf("%d ", current->data); current = current->next; } } int main() { // Создание исходного списка Node* head = createNode(1); Node* second = createNode(2); Node* third = createNode(3); head->next = second; second->next = third; // Копирование списка Node* newHead = copyList(head); // Вывод исходного списка printf("Исходный список: "); printList(head); // Вывод скопированного списка printf("nСкопированный список: "); printList(newHead); return 0; }
В этом примере мы создаем функцию copyList
, которая принимает голову исходного списка и возвращает голову копии списка. Мы создаем новую голову исходной копии, а затем перебираем все элементы исходного списка, каждый раз создавая новый узел для копии и связывая его с предыдущим узлом в копии.
Затем мы используем функцию printList
, чтобы вывести исходный список и скопированный список на экран.
Вывод программы будет следующим:
Исходный список: 1 2 3 Скопированный список: 1 2 3
Таким образом, мы успешно скопировали список в C.