一种特殊的链表节点类描述如下:
public class Node{
public int value;
public Node next;
public Node rand;
public Node(int data){
this.value = data
}
}
rand指针是Node类中的新增的指针,这个指针可能指向链表中任意的一个节点,也可能指向null
首先介绍普通解法:
使用哈希表
首先从左到右遍历链表,对每个节点都复制生成相应的副本节点
key 1 value 1`
package TT; import java.util.HashMap; public class Test95 { public class Node{ public int value; public Node next; public Node rand; public Node(int data){ this.value=data; } } 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); } }
时间: 2024-11-07 07:04:15