<LeetCode>剑指 Offer 35. 复杂链表的复制

复杂链表的复制

题目如下:

在这里插入图片描述

思路:
1、先复制原始链表
2、由于还有个random指针,因此使用一个HashMap来保存,其中,以原始链表的结点作为值,对应的复制链表的结点作为键

源代码:

/*
// 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;
    }
}
*/
class Solution {
    public Node copyRandomList(Node head) {
        if(head==null)
            return null;
        
        Node copyHead=new Node(-1);
        copyHead.val=head.val;
        // if(head.next==null)
        //     return copyHead;

        //先复制链表,同时以原链表的结点作为键,复制链表的结点作为值,建立一个Hash表
        Node tmpCopyHead=copyHead;
        Node tmpHead=head;
        HashMap<Node,Node> hashmap=new HashMap<>();
        //从第二个结点开始复制,因此在这里要先将其放置hashmap中
        hashmap.put(tmpHead,tmpCopyHead);
        tmpHead=tmpHead.next;
        while(tmpHead!=null)
        {
            Node nextNode=new Node(-1);
            nextNode.val=tmpHead.val;
            hashmap.put(tmpHead,nextNode);
            tmpCopyHead.next=nextNode;  //建立复制链表
            tmpCopyHead=tmpCopyHead.next;
            tmpHead=tmpHead.next;
        }

        //建立random
        tmpCopyHead=copyHead;
        tmpHead=head;
        while(tmpHead!=null)
        {
            if(tmpHead.random!=null)
            {
                tmpCopyHead.random=hashmap.get(tmpHead.random);
            }
            tmpCopyHead=tmpCopyHead.next;
            tmpHead=tmpHead.next;
        }
        return copyHead;
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值