将链表复制到对链表的引用

时间:2019-05-06 00:11:37

标签: c++ pointers linked-list reference

已分配给我一个指向链接列表的指针,并将其复制到作为指向链接列表的指针传递的新列表,然后递归复制它。尝试复制第一项时出现分段错误。

在保持函数原型的程序要求的同时,我尝试了所有可以想到的指针和引用的组合: 无效重复(node * head,node *&newHead)

 #include <iostream>
 #include "supplied.o"

 using namespace std;

 struct node
 {
     int data;
     node * next;
 };

 int main()
 {
     node * head = NULL;
     build(head);  // supplied function initializes list
     newHead = NULL;
     duplicate (head, newHead);
 }

 void duplicate (node * head, node*& newHead)
 {
     node * iterator1  = NULL;
     node * iterator2 = new Node;
     node * iterator2 = newHead;
     iterator2->data = iterator1->data; //error occurs here
     // program will continue to copy list recursively
 }

 void build (node *& head) //cannot see this function; provided via "supplied.o"
 {
 }

发生此错误是因为该函数无法访问iterator2->数据。 Iterator1->数据可以访问,甚至可以毫无问题地打印。

1 个答案:

答案 0 :(得分:2)

只需创建一个新节点,然后复制数据,然后使用next节点进行递归。注意空指针。就是这样。

duplicate(const node*head, node* &newhead)
{
    if(head) {
        // copy a valid node
        newhead = new node;                   // allocate a new node
        newhead->data = head->data;           // copy the data
        duplicate(head->next, newhead->next); // recurse on the next node
    } else
        // in case of null pointer: terminate recursion
        newhead = nullptr;
}

现在,考虑一下如果您用长长的清单呼叫duplicate并逐步使自己相信自己确实可以满足您的要求,那么会发生什么。