链表问题——复制含有随机指针节点的链表
来源:互联网 发布:js监听scroll事件 编辑:程序博客网 时间:2024/05/20 22:02
【题目】
一种特殊的链表节点类描述如下:
class Node{ public int value; public Node next; public Node rand; public Node(int data) { this.value = data; }}
Node类中的value是节点值,next指针和正常单链表中next指针的意义一样,都指向下一个节点,rand指针是Node类中新增的指针,这个指针可能指向链表中的任意一个节点,也可能指向null
给定一个由Node节点类型组成的无环单链表的头节点,请实现一个函数完成这个链表中所有结果的复制,并返回复制的新链表的头节点。
【代码】
这里介绍两种解法,普通解法和进阶解法
class test{ //普通解法 public Node copyListWithRand1(Node head) { HashMap<Node,Node> map = new HashMap<Node,Node>(); Node cur = head; while(cur != null) { map.put(cur,new Node(cur.value)); cur = cur.next; } cur = head; while(cur != null ) { map.get(cur).next = map.get(cur.next); map.get(cur).rand = map.get(cur.rand); cur = cur.next; } return map.get(head); } //进阶解法 public Node copyListWithRand2(Node head) { if(head == null) { return null; } Node cur = head; Node next = null; while(cur != null) { next = cur.next; cur.next = new Node(cur.value); cur.next.next = next; cur = next; } cur = head; Node curCopy = null; while(cur!=null) { next = cur.next.next; curCopy = cur.next; curCopy.rand = cur.rand != null ? cur.rand.next : null; cur = next; } Node res = head.next; cur = head; while(cur != head) { next = cur.next.next; curCopy = cur.next; cur.next = next; curCopy.next = next != null ? next.next : null; cur = next; } return res; }}
阅读全文
2 0
- 链表问题——复制含有随机指针节点的链表
- 复制含有随机指针节点的链表
- 如何复制一个含有随机指针节点的链表
- 复制含有随机指针节点的链表
- 复制含有随机指针节点的链表——C++实现
- 链表问题---复制含有随机指针节点的链表
- 复制含有随机节点的链表
- 复制含有随机指针的链表
- 复杂链表的复制(复制含有随机指针节点的链表)
- 含有random指针的链表复制
- LeetCode OJ 之 Copy List with Random Pointer(复制含有随机指针的链表)
- 带随机指针的链表复制问题
- O(1)时间复杂度删除链表节点/复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 基因数据处理55之cs-bwamem安装记录(idea maven ,没有通过pl)
- 基因数据处理56之bwa运行paird-end(1千万条100bp的reads).md
- C和指针之IO总结
- 机器学习12月16日日记(短)
- android okhttp3的封装
- 链表问题——复制含有随机指针节点的链表
- ssh框架整合的步骤
- android子进程发送toast
- openstack4j 源码分析(二) model对象
- MYSQL.导入超过100M数据库方法,MYSQL命令行导入大数据库方法
- python中any()和all()如何使用
- Hadoop简介
- 图像处理基础(6):锐化空间滤波器
- Ceph+RGW部署方案