1.三步法

    1. while(curNode){
    2. if(curNode->random)curNode->next->random = curNode->random->next;
    3. curNode = curNode->next->next;
    4. }

    if(curNode0->random) 这个判断不加会报错

    1. RandomListNode* Clone(RandomListNode* pHead)
    2. {
    3. if(!pHead)return NULL;
    4. RandomListNode* curNode = pHead;
    5. //在每个节点后插入复制的节点,random指针还未修改
    6. while(curNode){
    7. RandomListNode* node = new RandomListNode(curNode->label);
    8. node->next = curNode->next;
    9. curNode->next = node;
    10. curNode = node->next;
    11. }
    12. curNode = pHead;
    13. //修改random指针
    14. while(curNode){
    15. if(curNode->random)curNode->next->random = curNode->random->next;
    16. curNode = curNode->next->next;
    17. }
    18. RandomListNode* pCloneHead = pHead->next;
    19. RandomListNode *tmp;
    20. curNode = pHead;
    21. //拆分
    22. while(curNode->next){
    23. tmp = curNode->next;
    24. curNode->next = curNode->next->next;
    25. curNode = tmp;
    26. }
    27. return pCloneHead;
    28. }

    2.哈希表法