复制含有随机指针的链表
来源:互联网 发布:xp连接win7网络打印机 编辑:程序博客网 时间:2024/05/10 06:40
import java.util.*;//复制含有随机指针的链表public class CopyList{ //链表节点的定义 public static class Node{ public int value; public Node next; public Node rand; public Node(int data) { this.value=data; } } //复制链表(利用hash表保存原节点和复制节点的关系) public static Node Copylist(Node head) { if(head==null) { return head; } HashMap<Node,Node>map=new HashMap<Node,Node>(); Node cur=head; //记录头节点 while(cur!=null) { map.put(cur,new Node(cur.value)); //复制cur节点 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); } //进阶解法 (空间复杂度O(1)) public static Node opylist2(Node head) { if(head==null) { return head; } 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; //设置复制节点的rand指针 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!=null) { next=cur.next.next; curcopy=cur.next; cur.next=next; curcopy.next=next!=null?next.next:null; cur=next; } return res; } //打印链表 public static void PrintList(Node head) { while(head!=null) { System.out.print(head.value+" "); //if(head.rand!=null){ //System.out.print(head.rand.value+" "); //} head=head.next; } }public static void main(String []args){ //System.out.println("Hello"); Node node=new Node(1); node.next=new Node(2); node.next.next=new Node(3); node.rand=node.next.next; node.next.rand=null; node.next.next.rand=node; //Node mode=Copylist2(node); Node mode=Copylist2(node); PrintList(mode);}}
阅读全文
0 0
- 复制含有随机指针的链表
- 复制含有随机指针节点的链表
- 如何复制一个含有随机指针节点的链表
- 复制含有随机指针节点的链表
- 复杂链表的复制(复制含有随机指针节点的链表)
- 复制含有随机节点的链表
- 链表问题---复制含有随机指针节点的链表
- 链表问题——复制含有随机指针节点的链表
- LeetCode OJ 之 Copy List with Random Pointer(复制含有随机指针的链表)
- 复制含有随机指针节点的链表——C++实现
- 含有random指针的链表复制
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- elementui2.0图标错乱的问题
- python3中的 eval函数
- 机器学习系列笔记(四)
- opencv 直方图
- centos和ubuntu crontab 定时执行php文件
- 复制含有随机指针的链表
- idea .gitignore模板
- 机器学习实战——决策树(读书笔记)
- Orcale循环插入数据
- spaf算法求最短路径
- AsyncTask 的操作
- 关于系统的高可用性的一些见解
- mvn打包项目时跳过测试的两种方法
- 课堂作业