// 使用一一对应的哈希表结构 Map 存放已经创建的节点 Map map = new HashMap<>();
// 遍历原链表 while( cur != null ) { // 以原链表的节点为 Key,构建一个 Map // Map 的 Value 为一个新链表中的节点 // 新节点的值 val 和原链表的值 val 一样 // 但原链表中的每个节点都有 next 和 random 指针,而 Map 中的 Value 没有 next 和 random 指针 // map.put(Key,Value) map.put(cur,new Node(cur.val)); // 查看下一个节点的情况 cur = cur.next; }
// 再次从链表的头节点开始遍历 cur = head;
// 遍历原链表 while( cur != null ) {
// 原链表节点 ---- 新链表节点 // key ----- value // cur ----- map.get(cur)
// 0、在字典中找到一个 cur 为 key 对应的那个 value 值 Node valueCur = map.get(cur);
// 接下来,需要去寻找 valueCur 的 next 节点和 random 节点
// 寻找 valueCur 的 next 节点 // 1、获取当前节点 cur 在原链表中的 next 指针指向的节点 Node keyNextNode = cur.next;
// 遍历原链表 while( cur != NULL ) { // 以原链表的节点为 Key,构建一个 Map // Map 的 Value 为一个新链表中的节点 // 新节点的值 val 和原链表的值 val 一样 // 但原链表中的每个节点都有 next 和 random 指针,而 Map 中的 Value 没有 next 和 random 指针 // map.put(Key,Value) Node *newNode = new Node(cur->val);
map[cur] = newNode;
// 查看下一个节点的情况 cur = cur->next; }
// 再次从链表的头节点开始遍历 cur = head;
// 遍历原链表 while( cur != NULL ) {
// 原链表节点 ---- 新链表节点 // key ----- value // cur ----- map.[cur]
// 0、在字典中找到一个 cur 为 key 对应的那个 value 值 Node* valueCur = map[cur];
// 接下来,需要去寻找 valueCur 的 next 节点和 random 节点
// 寻找 valueCur 的 next 节点 // 1、获取当前节点 cur 在原链表中的 next 指针指向的节点 Node* keyNextNode = cur->next;