码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指Offer】25、复杂链表的复制

时间:2020-03-01 00:33:25      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:程序   nbsp   关系   初始化   剑指offer   输入   迭代   return   节点   

题目描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

题解:Hashmap
 1 public static RandomListNode Clone(RandomListNode pHead){
 2         if(pHead==null){
 3             return pHead;
 4         }
 5         RandomListNode oldP= pHead;
 6         RandomListNode freshP = pHead;
 7         //用一个 hashmap 建立新旧链表节点的对应的结点关系
 8         HashMap<RandomListNode, RandomListNode> map = new HashMap<>();
 9         //迭代旧链表,在 hashmap 中更新新链表的节点值字段
10         while(oldP!=null){
11             map.put(oldP, new RandomListNode(oldP.label));
12             oldP = oldP.next;
13         }
14         //更新新链表的 next 与 random 两个字段
15         while (freshP != null) {
16             if (freshP.next != null) {
17                 map.get(freshP).next = map.get(freshP.next);
18             } else {
19                 map.get(freshP).next = null;
20             }
21             map.get(freshP).random = map.get(freshP.random);
22             freshP = freshP.next;
23         }
24         return map.get(pHead);
25     }

初始化链表:

1 public static class RandomListNode {
2         int label;
3         RandomListNode next = null;
4         RandomListNode random = null;
5         RandomListNode(int label) {
6             this.label = label;
7         }
8     }

测试:

 1 public static void main(String[] args) {
 2         int[] nodes={1,2,3,4,5,3,5,-1,2,-1};
 3         int len=nodes.length;
 4         RandomListNode head=new RandomListNode(nodes[0]);
 5         RandomListNode temp=head;
 6        for(int i=1;i<len;i++){
 7             temp.next=new RandomListNode(nodes[i]);
 8             temp=temp.next;
 9         }
10         RandomListNode listNode = Clone(head);
11         while (listNode!=null){
12             System.out.print(listNode.label+" ");
13             listNode=listNode.next;
14         }
15     }
16 输出:1 2 3 4 5 3 5 -1 2 -1

 

【剑指Offer】25、复杂链表的复制

标签:程序   nbsp   关系   初始化   剑指offer   输入   迭代   return   节点   

原文地址:https://www.cnblogs.com/Blog-cpc/p/12387230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!