温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java复杂链表的示例分析

发布时间:2022-03-04 10:01:49 来源:亿速云 阅读:127 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关Java复杂链表的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    1.题目

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

    Java复杂链表的示例分析

    Java复杂链表的示例分析

    题目来源:力扣(LeetCode)

    链接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof

    2.解法

    2.1 拼接+拆分

    首先我们逐个将节点复制并且和原来的链表连起来得新链表;

    然后再构建新链表的random 指向。当访问原节点 cur 的随机指向节点 cur.random 时,对应新节点 cur.next 的随机指向节点为 cur.random.next 

    将得到的新链表之间的复制节点拆分出来连成一个复制链表,拆分成原链表和复制链表。

    链表图

    Java复杂链表的示例分析

     复制节点

    Java复杂链表的示例分析

     将复制节点的random.next 连接起来

    Java复杂链表的示例分析

     拆分成两个链表

    Java复杂链表的示例分析

    3.代码

    class Solution {
        public Node copyRandomList(Node head) {
            if(head == null) {
                return null;
            }        
            //1.复制各个链表,并连接
            Node cur = head;
            while (cur != null) {
                //复制
                Node prev = new Node(cur.val);
                prev.next = cur.next;
                //连接
                cur.next = prev;
                //往后走
                cur = prev.next;
            }
            //2.构建各新节点的random 指向
            cur = head;
            while (cur != null) {
                if (cur.random != null) {
                    cur.next.random = cur.random.next;
                }
                cur = cur.next.next;
            }
            //3.拆分复制的链表
            cur = head.next;
            Node node = head;
            Node nodeNext = head.next;
            while (cur.next != null) {
                node.next = node.next.next;
                cur.next = cur.next.next;
                node = node.next;
                cur = cur.next;
            }
            node.next = null;//尾节点
            return nodeNext;//返回新链表的头结点
        }
    }

    Java复杂链表的示例分析

    关于“Java复杂链表的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI