Логика дублирования связанного списка является рекурсивной и основана на следующих наблюдениях:
- Клон пустого списка - пустой список.
- Клон спискас первым узлом x и оставшимися узлами xs является копией x, добавленной к клону xs.
Если вы кодируете связанный список в C ++, это может быть очень чисто:
struct Node {
int value;
Node* next;
};
Node* Clone(Node* list) {
if (list == NULL) return NULL;
Node* result = new Node;
result->value = list->value;
result->next = Clone(list->next);
return result;
}