zoukankan      html  css  js  c++  java
  • 复杂链表的复制

    题目描述

    输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
     
    这个题有两种解法,第一种是用hashmap把原表random(随机指针)对应存起来,再复原,可是这个空间复杂度太高
    第二种方法,把原链表的a-b-c-d变成 a-a1-b-b1-c-c1-d-d1这样,a1的random指针应该指向a指针指向的位置的下一个位置(很好理解)
     
    注意:一定要先将a-b-c-d变成 a-a1-b-b1-c-c1-d-d1,再进行随机指针的变更,(把所有的next指针调好了,再调random指针)
    /*
    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)
        {
            RandomListNode Head=pHead;
            if(pHead==null){
                return null;
            }
            RandomListNode cur=pHead;
            RandomListNode next=pHead;
            while(cur!=null){
                next=cur.next;
                cur.next=new RandomListNode(cur.label);
                cur.next.next=next;
                cur=next;
            }
            
            cur=pHead;
            next=pHead;
            while(cur!=null){
                cur.next.random=cur.random==null?null:cur.random.next;
                cur=cur.next.next;;
            }
            RandomListNode pHead1=Head.next;
            while(Head!=null){
                next=Head.next.next;
                Head.next.next=next==null?null:next.next;
                Head.next=next;
                Head=next;
            }
            return pHead1;
    
        }
    }
  • 相关阅读:
    利用相关的Aware接口
    java 值传递和引用传递。
    权限控制框架Spring Security 和Shiro 的总结
    优秀代码养成
    Servlet 基础知识
    leetcode 501. Find Mode in Binary Search Tree
    leetcode 530. Minimum Absolute Difference in BST
    leetcode 543. Diameter of Binary Tree
    leetcode 551. Student Attendance Record I
    leetcode 563. Binary Tree Tilt
  • 原文地址:https://www.cnblogs.com/tobemaster/p/5903669.html
Copyright © 2011-2022 走看看