Data structures 克隆随机指针的链接列表时出现未知错误
C++代码Data structures 克隆随机指针的链接列表时出现未知错误,data-structures,linked-list,c++14,Data Structures,Linked List,C++14,C++代码 有一个用于克隆链表的C++代码 详情请参阅 Node* getNewNode(int data) { Node *newNode = new Node(); newNode->next = NULL; newNode->data = data; newNode->arb = NULL; return newNode; } Node * copyList(Node *head) { Node *cur = head, *
有一个用于克隆链表的C++代码 详情请参阅
Node* getNewNode(int data)
{
Node *newNode = new Node();
newNode->next = NULL;
newNode->data = data;
newNode->arb = NULL;
return newNode;
}
Node * copyList(Node *head)
{
Node *cur = head, *copy=NULL, *copy_cur, *next;
while(cur)
{
if(!copy)
{
copy = getNewNode(cur->data);
copy_cur = copy;
}
else
{
copy_cur->next = getNewNode(cur->data);
copy_cur = copy_cur->next;
}
cur = cur->next;
}
copy_cur = copy;
cur = head;
while(cur)
{
next = cur->next;
cur->next = copy_cur;
copy_cur->arb = cur;
copy_cur = copy_cur->next;
cur = next;
}
copy_cur = copy;
while(copy_cur)
{
copy_cur->arb = copy_cur->arb->arb->next;
copy_cur = copy_cur->next;
}
return copy;
}
任何人都可以帮助我理解这个实现中的错误。您的代码中有两个地方需要更正。 您的第一个while循环只是创建一个新的单链接列表,其中设置了下一个指针,而不是“arb”指针。与其创建一个完整的新列表,不如只在原始列表中嵌入新节点。之后设置随机指针会更容易
Node newlyClonedNode = createNewNode(node->data);
newlyClonedNode->next = node->next;
node->next = newlyClonedNode;
然后再次遍历列表并设置新克隆节点的随机指针
node->next->arb = node->arb->next;
完成后,将新列表从原始列表中断开,这样就可以恢复原始列表以及设置了随机指针的新克隆列表
Node clonedNode = node->next;
node->next = node->next->next;
clonedNode->next = clonedNode->next->next;
第一个
while
循环生成副本(除了不设置arb
指针,只设置next
;实际上,它生成一个单链接列表)。第二个while
循环做了一件非常奇怪的事情——它将原始列表撕开,使每个节点的下一个
指向新列表中相应的节点。基本上,您会得到两个平行的单链接列表-新列表与next
连接,原始列表与arb
连接,next
指针从旧一点指向新一点,arb
指针从新一点指向旧一点。这毫无意义。