class Solution { public: RandomListNode* Clone(RandomListNode* pHead) { if(pHead == NULL) return {}; RandomListNode* p = pHead; RandomListNode* res = new RandomListNode(p->label); //初始化目标链表 p = p->next; RandomListNode* rec = res; while(p){ //把原链表复制到目标链表 RandomListNode* temp = new RandomListNode(p->label); res->next = temp; res = res->next; p = p->next; } p = pHead; res = rec; while(p){ RandomListNode* temp = pHead; int count = 0; //count用来记录random是开头的第几个 if(p->random == NULL){ //如果random指空直接下次就行 res->random = NULL; p = p->next; res = res->next; continue; } while(temp != p->random){ //通过temp找到原链表的random指向谁,记录为count temp = temp->next; count++; } temp = rec; //temp等于目标链表头 while(count--){ //通过count找到random在目标链表的哪个位置 temp = temp->next; } res->random = temp; //random指过去即可 p = p->next; res = res->next; } return rec; } };