data-structures - 克隆随机指针链表时出现未知错误
问题描述
C++ 代码
有 C++ 代码用于克隆链表 请参考https://www.geeksforgeeks.org/a-linked-list-with-next-and-arbit-pointer/了解详情
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;
推荐阅读
- pandas - 将数据帧的 TimeIndex 转换为 DateTimeIndex
- reactjs - 在 react-jest 中使用钩子进行条件渲染的测试用例
- security - 在同一个 kubernetes 集群上安装两个 traefik 入口控制器
- java - Selenide 测试因 org/openqa/selenium/NoSuchSessionException 而失败
- r - 使用方法 maxLogL 时如何在变量中保留 BIC、AIC 和 maxloglikelihood
- google-colaboratory - 无论内核类型或文件名如何,从命令行向 Kaggle 比赛提交结果,无论是在 Kaggle 内部还是外部
- java - 从名为 variableX 的变量中检索数据 - Java
- java - Key Listener 一直在听更多的键,我不知道如何阻止它这样做
- reactjs - 在 2 个项目之间共享相同的 redux 代码
- php - 无论如何要获得文件大小的平均值吗?- PHP