如何将链表复制到另一个列表?

时间:2011-02-13 12:19:34

标签: c algorithm data-structures linked-list

我正在研究数据结构和链接列表,但我没有得到如何制作链表副本的概念。有人可以解释一下,可能使用伪代码或C代码吗?

2 个答案:

答案 0 :(得分:24)

复制链表的逻辑是递归的,并基于以下观察:

  1. 空列表的克隆是空列表。
  2. 具有第一个节点x和剩余节点xs的列表的克隆是x的副本,前面是xs的克隆。
  3. 如果使用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;
    }
    

答案 1 :(得分:5)

您是否了解如何将新节点添加到现有列表?您是否了解如何遍历(即迭代)列表?复制列表只是同时执行这两个操作(遍历ListA;对于每个元素,复制元素并将其作为新节点添加到ListB)。