35. 复杂链表的复制
Posted zzytxl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了35. 复杂链表的复制相关的知识,希望对你有一定的参考价值。
请实现 copyRandomList
函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next
指针指向下一个节点,还有一个 random
指针指向链表中的任意节点或者 null
。
示例 1:
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]] 输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
示例 2:
输入:head = [[1,1],[2,1]] 输出:[[1,1],[2,1]]
示例 3:
输入:head = [[3,null],[3,0],[3,null]] 输出:[[3,null],[3,0],[3,null]]
示例 4:
输入:head = [] 输出:[] 解释:给定的链表为空(空指针),因此返回 null。
提示:
-10000 <= Node.val <= 10000
Node.random
为空(null)或指向链表中的节点。- 节点数目不超过 1000 。
/* // Definition for a Node. class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this.next = null; this.random = null; } } */ class Solution { public Node copyRandomList(Node head) { if(head == null) return head; copyNext(head); copyRandom(head); return link(head); } private void copyNext(Node head){ while(head != null){ Node copyNode = new Node(head.val); Node nextNode = head.next; copyNode.next = nextNode; head.next = copyNode; head = nextNode; } } private void copyRandom(Node node){ while(node != null){ Node copyNode = node.next; if(node.random != null){ Node rnode = node.random; // copyNode.random = rnode.next; } node = copyNode.next; } } private Node link(Node head){ Node copyNode = head.next; Node copyHead = copyNode; head.next = copyNode.next; head = head.next; while(head != null){ //将连接断开 copyNode.next = head.next; head.next = head.next.next; head = head.next; copyNode = copyNode.next; } return copyHead; } }
以上是关于35. 复杂链表的复制的主要内容,如果未能解决你的问题,请参考以下文章