python 带随机指针的链表深度复制_LeetCode:复制带随机指针的链表
請實現 copyRandomList 函數,復制一個復雜鏈表。在復雜鏈表中,每個節點除了有一個 next 指針指向下一個節點,還有一個 random 指針指向鏈表中的任意節點或者 null。
思路:
1)原始1->2->3->N
2)復制成為 1->1->2->2->3->3`->N
3)在將隨機指針進行復制
4)將鏈表拆分成原鏈表和復制的鏈表
class Solution {
public:
Node* copyRandomList(Node* head) {
if(head==NULL)
return NULL;
/*Node* org = head;
Node *copy = NULL;
while (org != NULL)
{
copy = org;
copy->next = org->next;
org->next = copy;
org = org->next->next;
}*/
//復制成 長鏈表
Node *org = head;
Node *pnext = NULL;
while (org != NULL)
{
pnext = org->next;
Node* tmp = new Node(org->val);
tmp->next = pnext;
org->next = tmp;
org = pnext;
}
// 復制隨機指針
org = head;
Node *copy = head->next;
while (org != NULL)
{
//如果隨即指針為空 需要判斷
copy->random = org->random? org->random->next :NULL;
org = copy->next;
copy = org?org->next:org;
}
//拆分長鏈表
org = head;
copy = head->next;
Node *phead = copy;
while (org != NULL)
{
org->next = copy->next;
org = org->next;
// 最后一個結點 org為空 copu->next也為空
copy->next = org?org->next:org;
copy = copy->next;
}
return phead;
}
};
注意:代碼塊中注釋的代碼。看似也是復制成長鏈表,但是要記住指針不是結點,copy = org; 這種操作其實是 copy和org都指向了同一個Node,也就是存儲的值都是一樣的,是Node的地址,而不是copy新建了一個和org指向的結點一樣的新節點。
所以copy->next = org->next; 其實是copy->next == org->next; !!!
總結
以上是生活随笔為你收集整理的python 带随机指针的链表深度复制_LeetCode:复制带随机指针的链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 通信 教程_Java实现简单的
- 下一篇: python主要数据变量及其类型说明_P