138.随机链表的复制(LeetCode)

编程入门 行业动态 更新时间:2024-10-28 14:32:33

138.随机<a href=https://www.elefans.com/category/jswz/34/1769662.html style=链表的复制(LeetCode)"/>

138.随机链表的复制(LeetCode)

 

深拷贝,是指将该链表除了正常单链表的数值和next指针拷贝,再将random指针进行拷贝 

想法一 

先拷贝出一份链表,再对于每个节点的random指针,在原链表进行遍历,找到random指针的指向,最后完成拷贝链表random的指向

时间复杂度:O(N^2) 

想法二

 下面这种方法,是使用C语言的最优解

 

 

 

 

 

 

 

时间复杂度:O(N) 

完整代码如下:

struct Node* copyRandomList(struct Node* head)
{//1.拷贝节点插入原节点的后面struct Node* cur = head;while (cur){struct Node* copy = (struct Node*)malloc(sizeof(struct Node));copy->val = cur->val;struct Node* next = cur->next;copy->next = next;cur->next = copy;cur = next;}//2.控制拷贝节点的randomcur = head;while (cur){struct Node* copy = cur->next;if (cur->random){copy->random = cur->random->next;}else{copy->random = NULL;}cur = copy->next;}//3.拷贝节点解下来组成拷贝链表,恢复原链表cur = head;struct Node* copyHead = NULL;struct Node* copyTail = NULL;while (cur){struct Node* copy = cur->next;struct Node* next = copy->next;if (copyTail){copyTail->next = copy;copyTail = copyTail->next;}else{copyHead = copyTail = copy;}cur->next = next;cur = next;}return copyHead;
}

 

更多推荐

138.随机链表的复制(LeetCode)

本文发布于:2023-11-15 06:54:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1595540.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:链表   LeetCode

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!