用于在 O(1) 空间中克隆具有 Next 和随机指针的链表的 Javascript 程序
给定一个链表,每个节点都有两个指针。第一个指向列表的下一个节点,但是,另一个指针是随机的,可以指向列表的任何节点。编写一个程序,在 O(1) 空间中克隆给定列表,即没有任何额外空间。
例子:
Input : Head of the below-linked list
Output :
A new linked list identical to the original list.
在之前的帖子中,Set-1 和 Set-2 讨论了各种方法,并且还提供了 O(n) 空间复杂度实现。
在这篇文章中,我们将实现一个不需要额外空间的算法,如 Set-1 中所讨论的。
下面是算法:
- 创建节点1的副本并将其插入原始链接列表中的节点1和节点2之间,创建2的副本并将其插入2和3之间。继续以这种方式,在第N个节点之后添加N的副本
- 现在以这种方式复制随机链接
original->next->random= original->random->next; /*TRAVERSE
TWO NODES*/
- 这是有效的,因为 original->next 只不过是原始的副本,而 Original->random->next 只不过是随机的副本。
- 现在以这种方式在一个循环中恢复原始和复制链表。
original->next = original->next->next;
copy->next = copy->next->next;
- 确保 original->next 为 NULL 并返回克隆列表
下面是实现。
Javascript
输出
Original list :
Data = 1, Random = 3
Data = 2, Random = 1
Data = 3, Random = 5
Data = 4, Random = 5
Data = 5, Random = 2
Cloned list :
Data = 1, Random = 3
Data = 2, Random = 1
Data = 3, Random = 5
Data = 4, Random = 5
Data = 5, Random = 2
有关更多详细信息,请参阅有关在 O(1) 空间中使用 next 和随机指针克隆链接列表的完整文章!