复制链表

标签 c data-structures linked-list

typedef struct Node
{
  int data;
  Node *next;
  Node *other;
};

Node *pHead;

pHead 是一个单链表。 next 字段指向列表中的下一个元素。 other 字段可以指向列表中的任何其他元素(可以是前面的节点之一或前面的节点之一)或 NULL

如何编写复制链表及其连通性的复制函数?新列表中的任何元素(nextother)都不应指向旧列表中的任何元素。

最佳答案

为旧列表中的每个节点创建一个新节点,复制相应的数据并使新列表中节点的next指针指向新列表中它们的后继者,忘记other暂时的指针。在创建新节点时,请记住节点地址的映射,例如:

Old_list   New_list
------------------- 
0x123      0x345     [ addresses of the first node]
0xabc      0xdef     [ addresses of the second node]
...

在第二遍中,新列表中的每个节点都考虑其other 指针,并从映射中找到新列表中其对应的节点并将其用作other 该节点的指针(新列表中的节点)。

关于复制链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2242553/

相关文章:

java - 数据结构与算法实现-字典

python - 如何减少集点?

c - 如何编写测试用例来验证 linux 中 sem_wait 函数返回的 EINTR

C - 二维数组 sscanf 和索引错误

c - 你如何设置 autotools 默认 C++ 编译标志

c - 在递归函数中打印函数参数

sql-server - SQL Server NUMERIC/DECIMAL 精度与存储

Java初学者: How do I link one linked list to another?

c - 添加到链接列表

java - 在 Java 中理解对象并修改其链表中的变量时遇到困难