首先题目要求我们赋值这么一个链表,新链表中 :val值完全一样,next 和 random 虽然不一样,但是指向链表中 节点的val值是一样的,而且指向的该节点的位置和源节点位置 是一样的。
简单来说,就是 新链表 和 旧链表的地址 地址是不一样的,架构上完全一样。
题目要求:新链表中:新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。就像我们前面演示的一样。 指向的节点也是“相同的”。
那么,也就是说新链表 random的指向 应该 与 旧链表的指向 “相同”。
在来我怎么将新链表的random指向 与 旧链表的 random 指向 “相同的节点”。
class Solution {
public Node copyRandomList(Node head) {
if(head == null){
return head;
}
for(Node node = head; node!=null;node =node.next.next){
Node newNode = new Node(node.val);
newNode.next = node.next;
node.next = newNode;
}
for(Node node = head; node!=null;node = node.next.next){
Node newNode = node.next;
newNode.random = (node.random != null) ? node.random.next:null;
}
Node newHead = head.next;
for(Node node = head;node!=null;node = node.next){
Node newNode = node.next;
node.next = node.next.next;
newNode.next = (newNode.next != null) ? newNode.next.next : null;
}
return newHead;
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/DarkAndGrey/article/details/122149872
内容来源于网络,如有侵权,请联系作者删除!