复杂链表的复制

本文介绍如何实现剑指Offer中的copyRandomList函数,处理包含random指针的复杂链表。通过哈希表映射和节点复制,同时保持random指针的指向。难点在于构建新链表时正确链接random指针。
摘要由CSDN通过智能技术生成

请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。

来源:剑指Offer

class Solution {

    public Node copyRandomList(Node head) {

        if(head==null)return null;     //判断头节点是否为空,如果空则空

        Node cur=head;   //指针,当前节点指向头节点

        Map<Node,Node>map=new HashMap<>();//节点构造哈希表

        while(cur!=null){

            map.put(cur,new Node(cur.val));//复制各节点,建立映射关系

            cur=cur.next;//遍历原节点下一节点

        }

        cur=head;//指向头节点

        while(cur!=null){

            map.get(cur).next=map.get(cur.next);

            map.get(cur).random=map.get(cur.random);//构建next和random的指向

            cur=cur.next;

        }

        return map.get(head);//返回新链表的头节点

    }

}

本题链表的节点新增了 random 指针,指向链表中的 任意节点 或者 nullnull 。这个 random 指针意味着在复制过程中,除了构建前驱节点和当前节点的引用指向 pre.next ,还要构建前驱节点和其随机节点的引用指向 pre.random 。

本题难点: 在复制链表的过程中构建新链表各节点的 random 引用指向。

引用指向重点在于设立哈希表,进行映射的复制与指向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值