/* p->next = r; // 带 -> 理解为指向 p结点 指向 r 结点 ,p 指针本身不变化 r = r->next; // 不带 -> 理解为赋值; r 代表 r的next r 指针变化后移 }; 重新声明空间构造,random 指向的结点 不容易找到。 在原有链表上先复制出新的节点,根据原有链表关系找到新复制的节点 */ class Solution { public: RandomListNode* Clone(RandomListNode* pHead) { if(!pHead) return NULL; RandomListNode *p = pHead; while(p){ // 所有结点复制一份,其复制的结点相邻; RandomListNode *tmp = new RandomListNode(p->label); tmp->next = p->next; p->next = tmp; p = tmp->next; } p = pHead; while(p){ // random 赋值 if(p->random) p->next->random = p->random->next; p = p->next->next; } p = pHead->next; RandomListNode *aHead = pHead->next; while(p){ //生成的链表脱离 RandomListNode *tmp = p->next->next; p->next = tmp; p = tmp; } return aHead; } };