当前位置: 代码迷 >> 综合 >> 剑指offer之面试题25——复杂链表的复制
  详细解决方案

剑指offer之面试题25——复杂链表的复制

热度:53   发布时间:2024-01-30 12:32:14.0

题目:

请实现函数ComplexListNode*Clone(ComplexListNode*pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling 指向链表中的任意结点或者NULL。结点的C++定义如下:

代码:

/*
// Definition for a Node.
class Node {
public:int val;Node* next;Node* random;Node() {}Node(int _val, Node* _next, Node* _random) {val = _val;next = _next;random = _random;}
};
*/class Solution {
public:Node* copyRandomList(Node* head) {if(!head)return nullptr;Node* p=head;while(p){Node*q=new Node(0, nullptr, nullptr);q->next=p->next;q->val=p->val;q->random=p->random;p->next=q;p=q->next;}p=head;Node* q=head->next;while(q){if(p->random){q->random=p->random->next;}p=q->next;if (p)q=p->next;else p=q= nullptr;}Node* first=new Node(0, nullptr, nullptr);first->next=head->next;p=head;q=head->next;while(q->next){p->next=q->next;p=p->next;q->next=p->next;q=q->next;}p->next=nullptr;return first->next;}
};

思路:

第一步:在每个节点后边新增它的复制

第二步:复制节点的random等于节点的random的next

第三步,拆分两个节点

  相关解决方案