题目 复制含有随机指针节点的链表
一种特殊的链表节点描述如下
typedef struct ListNode{
int data;
ListNode* next;
ListNode* random;
ListNode(int x):
data(x),next(NULL),random(NULL){}
}
ListNode类中的data是节点值,next指针和正常的单链表指针中的next指针的意义一样,都指向下一个节点,random指针是ListNode类中的新增的指针,这个指针可能指向链表中的任意一个节点,也可能指向NULL。
给定一个由ListNode节点类型组成的无环单链表的头节点head,请实现一个函数完成这个链表中所有结构的复制,并返回复制的新链表的头节点。
代码
ListNode* copyListWithRand1(ListNode* head){
hash_map<ListNode*,ListNode*>hashNode;
ListNode* cur=head;
while(cur!=NULL){
ListNode* temp=new ListNode (cur->data);
hashNode[cur]=temp;
cur=cur->next;
}
cur=head;
while(cur!=NULL){
hashNode[cur]->next=hashNode[cur->next];
hashNode[cur]->random=hashNode[cur->random];
}
return hashNode[head];
}