剑指 Offer 35. 复杂链表的复制

剑指 Offer 35. 复杂链表的复制

Offer_35

题目详情

方法一

  • 可以使用一个HashMap来存储旧结点和新结点的映射。
  • 这种方法需要遍历链表两遍,因为需要首先知道映射关系才能求出next和random结点。
package com.walegarrett.offer;

import java.util.Comparator;
import java.util.HashMap;
import java.util.TreeSet;

/**
 * @Author WaleGarrett
 * @Date 2021/2/1 20:46
 */
// Definition for a Node.
class Node {
    int val;
    Node next;
    Node random;

    public Node(int val) {
        this.val = val;
        this.next = null;
        this.random = null;
    }
}
public class Offer_35 {

    public Node copyRandomList(Node head) {
        HashMap<Node, Node> map = new HashMap<>();
        Node current = head;
        while(current != null){
            map.put(current, new Node(current.val));
            current = current.next;
        }
        current = head;
        while(current != null){
            map.get(current).next = map.get(current.next);
            map.get(current).random = map.get(current.random);
            current = current.next;
        }
        return map.get(head);
    }
}
posted @   Garrett_Wale  阅读(45)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示