Java面试题-实现复杂链表的复制代码分享
2017-10-16 10:53
791 查看
阿里终面在线编程题,写出来与大家分享一下
有一个单向链表,每个节点都包含一个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; } }
总结
以上就是本文关于Java面试题-实现复杂链表的复制代码分享的全部内容,感兴趣的朋友可以继续参阅:Java输出链表倒数第k个节点、Java语言实现反转链表代码示例、Java编程实现从尾到头打印链表代码实例以及本站其他相关专题,希望对大家有所帮助。如有不足之处,欢迎留言指出,小编一定及时更正,给大家提供更好的阅读体验及帮助,感谢朋友们对本站的支持!
您可能感兴趣的文章:
- Java面试题解析之判断以及防止SQL注入
- 详解Java面试官最爱问的volatile关键字
- 网易Java程序员两轮面试 请问你能答对几个?
- 阿里、华为、腾讯Java技术面试题精选
- 小米Java程序员第二轮面试10个问题 你是否会被刷掉?
- Java高级面试题小结
- Java main 方法面试题的详细整理
- Java常见数据结构面试题(带答案)
- 值得收藏的2017年Java开发岗位面试题
- 轻松理解Java面试和开发中的IoC(控制反转)
- Java常用类String的面试题汇总(java面试题)
- JAVA面试题之Forward与Redirect的区别详解
- java面试题之try中含return语句时代码的执行顺序详解
- 2018年java技术面试题整理
相关文章推荐
- 剑指offer面试题26:复杂链表的复制Java实现
- 剑指offer--面试题26:复杂链表的复制--Java实现
- 剑指Offer:面试题26——复制复杂的链表(java实现)
- 剑指 offer代码解析——面试题26复杂链表的复制
- 复杂链表的复制(Java实现)
- java实现输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head
- java简单实现复制 粘贴 剪切功能代码分享
- java简单实现复制 粘贴 剪切功能代码分享
- 剑指 offer代码解析——面试题26复杂链表的复制
- 剑指Offer 面试题22:链表中倒数第k个节点 Java代码实现
- 剑指Offer 面试题24:反转链表 Java代码实现
- 剑指Offer 面试题18:删除链表节点 Java代码实现
- 经典面试题之复杂链表复制的简单实现
- 经典面试题:Java实现-归并K条已排序的链表及复杂度分析、优化
- 剑指Offer 面试题25:合并两个排序的链表(递归+非递归) Java代码实现
- 剑指Offer 面试题23:链表中环的入口节点 Java代码实现
- 剑指Offer面试题26(Java版):复杂链表的复制
- 剑指offer 面试题26复杂链表的复制
- VB实现的递归复制文件和搜索文件的代码分享
- javascript中实现兼容JAVA的hashCode算法代码分享