最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java面试题-实现复杂链表的复制代码分享
时间:2022-06-29 01:12:15 编辑:袖梨 来源:一聚教程网
阿里终面在线编程题,写出来与大家分享一下
有一个单向链表,每个节点都包含一个random指针,指向本链表中的某个节点或者为空,写一个深度拷贝函数,拷贝整个链表,包括random指针。尽可能考虑可能的异常情况。
算法如下:
/* public class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null; RandomListNode(int label) { this.label = label; } } */ public class Solution { public RandomListNode Clone(RandomListNode pHead) { copyNodes(pHead); setClonedNodes(pHead); return splitNodes(pHead); } //第一步,复制链表任意结点N并创建新结点N‘,再把N'链接到N的后面 public static void copyNodes(RandomListNode head){ RandomListNode temp = head; while(temp!=null){ RandomListNode clonedNode = new RandomListNode(0); clonedNode.next = temp.next; clonedNode.label = temp.label; clonedNode.random = null; temp.next = clonedNode; temp = clonedNode.next; } } //第二步,设置复制出来的结点 public static void setClonedNodes(RandomListNode head){ RandomListNode pNode = head; while(pNode!=null){ RandomListNode pCloned = pNode.next; if(pNode.random!=null){ pCloned.random = pNode.random.next; } pNode = pCloned.next; } } //第三步,将第二步得到的链表拆分成两个链表 public static RandomListNode splitNodes(RandomListNode head){ RandomListNode pNode = head; RandomListNode clonedHead = null; RandomListNode clonedNode = null; if(pNode!=null){ clonedHead = pNode.next; clonedNode = pNode.next; pNode.next = clonedNode.next; pNode = pNode.next; } while(pNode!=null){ clonedNode.next = pNode.next; clonedNode = clonedNode.next; pNode.next = clonedNode.next; pNode = pNode.next; } return clonedHead; } }
相关文章
- 银与绯啖魂怎么获取 银与绯啖魂获取方法介绍 07-08
- 2025年最火的虚拟币-2025年十大虚拟币种 07-08
- Pump.fun的陨落是对所有"快速行动、打破常规"项目的警示 07-08
- 我的魔法英雄伙伴选择什么法师好 我的魔法英雄伙伴法师选择推荐大全 07-08
- 侠客回忆录2为什么要组队 侠客回忆录2组队重要性一览 07-08
- 最新比特币持币地址数量介绍-2025年比特币持币地址有多少个 07-08