LeetCode | 138. 随机链表的复制
思路:
- 题目要求我们拷贝一个带
next
指针与random
随机访问指针的链表。 - 如果只拷贝一个只带next的指针,直接遍历目标链表依次拷贝每个节点的信息就可以了~~
- 拷贝节点插入到原节点的后面
- 处理copy节点的random
- copy节点下来的尾插
struct Node* copyRandomList(struct Node* head) { struct Node* cur = head; //拷贝节点插入到原节点的后面 while(cur) { struct Node* copy = (struct Node*)malloc(sizeof(struct Node)); copy->val = cur->val; copy->next = cur->next; cur->next = copy; //cur = copy->next; cur = cur->next->next; } //处理copy节点的random cur = head; while(cur) { struct Node* copy = cur->next; if(cur->random == NULL) { copy->random = NULL; } else { copy->random = cur->random->next; } cur = cur->next->next; } //copy节点下来的尾插 struct Node* newhead = NULL,*tail = NULL; cur = head; while(cur) { struct Node* copy = cur->next; struct Node* next = copy->next; if(tail == NULL) { newhead = tail = copy; } else { tail->next = copy; tail = tail->next; } copy->next = next; cur = next; } return newhead; }