11.随机链表的复制
138. 随机链表的复制 - 力扣(LeetCode)
/* 解题思路: 此题可以分三步进行: 1.拷贝链表的每一个节点,拷贝的节点先链接到被拷贝节点的后面 2.复制随机指针的链接:拷贝节点的随机指针指向被拷贝节点随机指针的下一个位置 3.拆解链表,把拷贝的链表从原链表中拆解出来 */
class Solution {
public:Node* copyRandomList(Node* head) {// 1.拷贝链表,并插入到原节点的后面Node* cur = head;while(cur){Node* next = cur->next;Node* copy = (Node*)malloc(sizeof(Node));copy->val = cur->val;// 插入cur->next = copy;copy->next = next;// 迭代往下走cur = next;}// 2.置拷贝节点的randomcur = head;while(cur){Node* copy = cur->next;if(cur->random != NULL)copy->random = cur->random->next;elsecopy->random = NULL;cur = copy->next;}// 3.解拷贝节点,链接拷贝节点Node* copyHead = NULL, *copyTail = NULL;cur = head;while(cur){Node* copy = cur->next;Node* next = copy->next;// copy解下来尾插if(copyTail == NULL){copyHead = copyTail = copy;}else{ copyTail->next = copy;copyTail = copy;}cur->next = next;cur = next;}return copyHead;}
};