zoukankan      html  css  js  c++  java
  • 深度拷贝一个链表

    要求:

    输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
    返回一个该链表的深度拷贝。

    思路:

    1、遍历该链表,复制每一个节点,插入到当前节点的后面.形成如下链表.
    1->1'->2->2'....

    2、将每个拷贝节点的随机指针域,指向原节点(即拷贝节点的上一个节点)的随即指针域指向(注意随机指针域可能为空)的下一个节点.即1的随机指针域指向3,则1'的随机指针域指向3的下一个指针3'.

    3、拆分链表,返回1'->2'->3'...

    代码:

    public class RandomListNode {
        int label;
        RandomListNode next = null;
        RandomListNode random = null;
    
        RandomListNode(int label) {
            this.label = label;
        }
    }
    public class Solution {
        public RandomListNode Clone(RandomListNode pHead)
        {
            if(pHead==null)return null;
            RandomListNode runner=pHead;
            RandomListNode copyCat=null;
            //First round: make copy of each nodes
            while(runner!=null){
                copyCat=new RandomListNode(runner.label);
                copyCat.next=runner.next;
                runner.next=copyCat;
                runner=copyCat.next;
            }
    
            //Second Round: assign random pointers for the copy nodes
            runner=pHead;       
            while(runner!=null){
                copyCat=runner.next;
                //notice random pointers could be null
                copyCat.random=runner.random==null?null:runner.random.next;
                runner=runner.next.next;
            }
    
            //Third round: restore the original list, and extract the copy list.
            runner=pHead;
            pHead=runner.next;
            while(true){
                copyCat=runner.next;
                runner.next=copyCat.next;
                runner=copyCat.next;
                if(runner==null){
                    break;
                }
                else{
                   copyCat.next=runner.next;
                }           
            }
            return pHead;
        }
    }
  • 相关阅读:
    oracle中新建用户和赋予权限
    Oracle创建表空间和表
    IntelliJ IDEA 使用教程(2019图文版) -- 从入门到上瘾
    idea
    oracle
    JavaScript常见调试方法
    java
    css -html-文档流
    Ubuntu18.04安装常用软件指南
    java实现点击查询数据生成excel文件并下载
  • 原文地址:https://www.cnblogs.com/sMKing/p/6757738.html
Copyright © 2011-2022 走看看