复制带随机指针的链表
来源:互联网 发布:视频机器码破解软件 编辑:程序博客网 时间:2024/04/30 23:58
给出一个链表,每个节点包含一个额外增加的随机指针可以指向链表中的任何节点或空的节点。
返回一个深拷贝的链表。
按照通常的链表拷贝方式来处理,麻烦的地方在于随机指针的处理,要找到原链表结点上随机指针指向的结点在新表中的位置
解决的思路是
使用三次循环
第一次循环,拷贝全部结点,并将新结点插入原结点之后.
第二次循环,遍历全部结点,拷贝random指针
伪代码描述
A->random != null
A”->random=A->random->next
第三次循环,恢复原链表和拷贝的新链表
A->next=A’->next;
A’->next=A’->next->next;
/** * Definition for singly-linked list with a random pointer. * class RandomListNode { * int label; * RandomListNode next, random; * RandomListNode(int x) { this.label = x; } * }; */public class Solution { /** * @param head: The head of linked list with a random pointer. * @return: A new head of a deep copy of the list. */ public RandomListNode copyRandomList(RandomListNode head) { // write your code here RandomListNode p = head; //复制结点并且插入原链表 while(p != null) { RandomListNode q = new RandomListNode(p.label); q.next = p.next; p.next = q; p = q.next; } p = head; while(p != null) { if(p.random != null) p.next.random = p.random.next; else p.next.random = null; p = p.next.next; } p = head; RandomListNode q = head.next; result = head.next; //恢复 while(q.next != null) { p.next = q.next; p = p.next; q.next = p.next; q = q.next; } return result; }}
0 0
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 带随机指针的链表复制问题
- M1: 复制带随机指针的链表
- 复制一个带随机指针的链表
- LintCode复制带随机指针的链表
- 题目:复制带随机指针的链表
- LintCode(105) 复制带随机指针的链表
- LintCode:复制带随机指针的链表
- lintcode,复制带随机指针的链表
- lintcode,复制带随机指针的链表
- LintCode(M) 复制带随机指针的复杂链表
- LintCode 105-复制带随机指针的链表
- 立一个Flag
- Oracle04
- BIO,NIO和AIO的区别
- [java入门]--java第一个程序Hello World(超详细步骤)
- 292. Nim Game
- 复制带随机指针的链表
- 350. Intersection of Two Arrays II
- Struts2系列笔记(7)---Struts2类型转换
- C++ bitset类的使用与简介
- Pd10安装 Ubuntu14.04
- java.util.concurrent介绍
- WebLogic
- 基于S5PV210板驱动开发之按键驱动
- CPU、内存、硬盘、指令以及他们之间的关系