【剑指offer】复杂链表的复制
来源:互联网 发布:ei数据库官网 编辑:程序博客网 时间:2024/05/16 18:49
题目:
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),实现链表的复制。
分析:
首先想到的是先将链表的下一个节点链路复制出一条链表,再从头开始将链表的任意节点指针复制,问题在于任意节点的指针可以指向任意位置,每个节点都要从头查找。
由于链表的顺序性,可以将复制链表复制在原链表内部,最后拆分为两个单独的复杂链表即可。这样任意节点的指针就可以根据原链表节点之间找到,无需遍历查找。
实现:
<span style="font-family:Microsoft YaHei;font-size:14px;">public RandomListNode Clone(RandomListNode pHead) {if (pHead == null) {return null;}clone(pHead);random(pHead);return copylist(pHead);}public void clone(RandomListNode pHead) {RandomListNode node = pHead;while (node != null) {// 复制一个当前结点,注意需要新建出结点RandomListNode clone = new RandomListNode(node.label);// 将复制结点插入当前结点后面clone.next = node.next;node.next = clone;// 移动当前节点位置,继续循环node = clone.next;}}public void random(RandomListNode pHead) {// 设置两个指向当前结点和复制结点的“指针”RandomListNode node = pHead;RandomListNode clone = null;while (node != null) {// if (node.next != null) {clone = node.next;// }// 根据当前结点的random设置复制结点的randomif (node.random != null) {clone.random = node.random.next;}node = clone.next;}}// 抽出一个拆分链表的函数:将奇偶项分别拆开为两个链表public RandomListNode copylist(RandomListNode pHead) {RandomListNode plist = pHead;// 记录复制链表的头结点,防止覆盖RandomListNode clonehead = plist.next;RandomListNode clonenode = plist.next;plist.next = clonenode.next;plist = plist.next;while (plist != null) {clonenode.next = plist.next;clonenode = clonenode.next;plist.next = clonenode.next;plist = plist.next;}return clonehead;}public static void printList(RandomListNode head) {while (head != null) {System.out.print(head.label + "->");head = head.next;}System.out.println("null");}</span>
0 0
- 【剑指offer】复杂链表的复制
- 剑指offer--复杂链表的复制
- 《剑指offer》复杂链表的复制
- 剑指offer:复杂链表的复制
- 剑指offer - 复杂链表的复制
- 剑指Offer--复杂链表的复制
- 剑指offer:复杂链表的复制
- 【剑指offer】复杂链表的复制
- 剑指offer-复杂链表的复制
- 剑指offer:复杂链表的复制
- 剑指offer:复杂链表的复制
- [剑指offer]复杂链表的复制
- 【剑指offer】复杂链表的复制
- 剑指offer|复杂链表的复制
- 《剑指offer》复杂链表的复制
- 剑指Offer:复杂链表的复制
- 剑指offer 复杂链表的复制
- 剑指offer-复杂链表的复制
- 基于贝叶斯判决的肤色检测
- 操作系统中的锁
- 添加额外的源, 使得yum可以安装更多的软件
- I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之UART移植
- JAVA中获取当前系统时间
- 【剑指offer】复杂链表的复制
- MYSQL 锁
- libevent总结(下)
- mac os + sublime text3 搭建 golang 环境
- HTML5 Server-Sent Events with JSP example
- 二进制学习差分进化算法(BLDE)的R语言实现
- PRD实用案例|「赶公交」App产品需求文档
- adb logcat命令行用法
- ubuntu下postgresql快速安装