复杂链表的复制
来源:互联网 发布:有没有唱歌软件 编辑:程序博客网 时间:2024/06/02 06:52
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
思路:分成三步走
1.在原结点后面加入复制结点,原链表长度变为2倍
2.将复制节点的random值设为源节点的random值的next
3.分离两个链表
/*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) { RandomListNode pNode = pHead; if(pHead == null)return null; //遍历链表,每个结点后面都添加一个复制的结点 while(pNode != null){ RandomListNode randomNode = new RandomListNode(pNode.label); randomNode.next = pNode.next; pNode.next = randomNode; pNode = randomNode.next; } pNode = pHead; RandomListNode pNewNode; //设置上随机指针 while(pNode != null){ pNewNode = pNode.next; if(pNode.random != null) pNewNode.random = pNode.random.next; pNode = pNewNode.next; } RandomListNode pNewHead = null; pNode = pHead; //分离链表 while(pNode != null){ if(pNewHead == null) pNewHead = pNode.next; pNewNode = pNode.next; pNode.next = pNewNode.next; pNode = pNode.next; if(pNode != null) pNewNode.next = pNode.next; } return pNewHead; }}
阅读全文
0 0
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复制复杂的链表
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- Java并发编程的艺术(一)-----并发编程的挑战及解决方案
- ssh报的一个错
- JavaScript 字符串加减数字
- n级阶梯,每次走一步或两步,问最多有多少种走法
- Unity_设计模式_单例模式_04
- 复杂链表的复制
- IDEA 快捷键整理
- LTE学习总结—KPI优化中信息获取方式
- 安卓开发-国际化.风格主题.简单帧动画
- 泛型的意义及使用
- Hadoop/Spark推荐系统(一)——共同好友
- Asp.Net重定向过程
- 【论文学习】3D Convolutional Neural Networks for Human Action Recognition
- 欢迎使用CSDN-markdown编辑器