栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 剑指offer之[数据结构 困难]JZ25 复杂链表的复制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 剑指offer之[数据结构 困难]JZ25 复杂链表的复制

题目的链接在这里:https://www.nowcoder.com/practice/f836b2c43afc4b35ad6adc41ec941dba

目录
  • 题目大意
  • 一、示意图
  • 二、解题思路
    • 迭代加拼接拆分


题目大意 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 下图是一个含有5个结点的复杂链表。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。
一、示意图

二、解题思路
迭代加拼接拆分
迭代加拼接拆分

代码如下:

public class Solution {
    public RandomListNode Clone(RandomListNode pHead) {
        //复杂节点 一个指向next 一个指向随机的一个
        
        
        if(pHead==null)
            return null;
        RandomListNode randomListNode=pHead;
        
        while (randomListNode!=null){
            //值和当前值一样
            RandomListNode tempNode=new RandomListNode(randomListNode.label);
            //然后把他指向当前的next
            tempNode.next=randomListNode.next;
            //然后让当前的 指向rand
            randomListNode.next=tempNode;
            //然后当这个当前值 移动到原链表的下一个
            randomListNode=tempNode.next;
        }
        
        randomListNode=pHead;
        while (randomListNode!=null){
            
            //先判断他这个指向不是null
            if(randomListNode.random!=null){
                 //那就更新新的节点 也就是当前节点的next
                //把他赋值成 原链表中random节点指向的节点
                randomListNode.next.random=randomListNode.random.next;
            }
            //然后让他继续指向下一个原链表节点
            randomListNode=randomListNode.next.next;
        }
        
        randomListNode=pHead.next;
        RandomListNode oldNode=pHead;
        RandomListNode result=pHead.next;
        while (randomListNode.next!=null){
            //原链表进行组合
            oldNode.next=oldNode.next.next;
            //新的也进行组合
            randomListNode.next=randomListNode.next.next;
            //然后都往后移
            oldNode=oldNode.next;
            randomListNode=randomListNode.next;
        }
        //这里就会出现 randomlistNode指向最后一个 这个时候 old也指向最后一个
        oldNode.next=null;
        //然后返回新链表的头指针
        return result;


    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/307211.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号