题目:请写一个函数clone(ComplexListNode pHead),实现复杂链表的复制。

复杂链表的数据结构如下:public class ComplexListNode{int m_nValue;ComplexListNode m_pNext;ComplexListNode m_pSliping//指向链表中的任何一个节点}

例如:m_pSliping指向NUll的,并没有画出来。

将复杂的问题简单化,各个击破:

思路:第一步,就是复制节点,并连接到原始节点的后面,第二步,设置复制出来节点的m_pSliping.第三步,将复制的链表从原始链表中分离。

如图:

Java代码:

public class ComplexLinkCloned {
//对于复杂链表的复制问题:1、复制节点,并连接到原始节点的后面。2.设置复制出来节点的m_pSliping。
//3.将复制的链表从原始的链表中分离出来。
public class ComplexListNode{
int m_nValue;
ComplexListNode m_pNext;
ComplexListNode m_pSliping;
}
//复制节点
public void clonedNode(ComplexListNode pHead){
if(pHead==null)
return;
ComplexListNode pNode=pHead;
while(pNode!=null){
ComplexListNode pClonedNode=new ComplexListNode();
pClonedNode.m_nValue=pNode.m_nValue;
pClonedNode.m_pNext=pNode.m_pNext;
pClonedNode.m_pSliping=null;
pNode.m_pNext=pClonedNode;
pNode=pClonedNode.m_pNext;
}
}
//设置m_pSliping
public void connectSlipingNode(ComplexListNode pHead){
if(pHead==null)
return;
ComplexListNode pNode=pHead;
while(pNode!=null){
ComplexListNode pCloned=pNode.m_pNext;
if(pNode.m_pSliping!=null){
pCloned.m_pSliping=pNode.m_pSliping.m_pNext;
}
pNode=pCloned.m_pNext;
} }
//将复制的链表从整个链表中分离
public ComplexListNode reConnectNode(ComplexListNode pHead){
ComplexListNode pNode=pHead;
ComplexListNode pClonedNode=null;
ComplexListNode pClonedHead=null;
if(pNode!=null){
pClonedHead=pClonedNode=pNode.m_pNext;
pNode.m_pNext=pClonedNode.m_pNext;
pNode=pNode.m_pNext;
}
while(pNode!=null){
pClonedNode.m_pNext=pNode.m_pNext;
pClonedNode=pClonedNode.m_pNext;
pNode.m_pNext=pClonedNode.m_pNext;
pNode=pNode.m_pNext; }
return pClonedHead;
}
public ComplexListNode Clone(ComplexListNode pHead){
clonedNode(pHead);
connectSlipingNode(pHead);
return reConnectNode(pHead);
} }

剑指offer-第四章解决面试题思路(复杂链表的复制)的更多相关文章

  1. 剑指offer第四章

    剑指offer第四章 1.二叉树的镜像 二叉树的镜像:输入一个二叉树,输出它的镜像 分析:求树的镜像过程其实就是在遍历树的同时,交换非叶结点的左右子结点. 求镜像的过程:先前序遍历这棵树的每个结点,如 ...

  2. 【剑指Offer面试编程题】题目1524:复杂链表的复制--九度OJ

    题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点). 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第 ...

  3. 剑指offer-第四章解决面试题思路之总结

  4. 剑指offer-第四章解决面试题思路(字符串的排序)

    题目:输入一个字符串,打印出该字符串的全排列. 思路:将整个字符串分成两部分,第一部分为一个字符,将该字符和该字符后面的字符(直到最后一个字符)依次交换,确定第一个字符:然后固定第一个字符,将后面的字 ...

  5. 剑指offer-第四章解决面试题思路(二叉收索树和双向链表)

    题目:输入一个二叉收索树,将二叉搜索树转换成排序的双向链表.要求不能创建节点,只能将链表中的指针进行改变. 将复杂的问题简单化:思路:二叉收索树,本身是一个排序结构,中序遍历二叉收索树就可以得到一组排 ...

  6. 剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)

    二叉搜索树:二叉搜索树根节点的左边都比根节点小,右边都比根节点大. 例题:输入一个数组,判断是否为二叉搜索树的后序遍历序列,如果是,返回true,如果不是,返回flase,假设没有重复的元素. 思路: ...

  7. 《剑指offer》第三十五题(复杂链表的复制)

    // 面试题35:复杂链表的复制 // 题目:请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复 // 制一个复杂链表.在复杂链表中,每个结点除 ...

  8. 简直offer-第四章解决面试题思路(二叉树中和为某一值的路径)

    题目:输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点往下一直到叶子节点形成一条路径. 思路:很明显用前序遍历可以从根节点开始遍历到叶子节点,然后将遍历的节点添加到 ...

  9. 剑指offer第五章

    剑指offer第五章 1.数组中出现次数超过一半的数 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组 ...

随机推荐

  1. Python学习笔记之Python的enumerate函数

    Python 的 enumerate() 函数就像是一个神秘的黑箱,你无法简单地用一句话来概括这个函数的作用与用法. enumerate() 函数属于非常有用的高级用法,而对于这一点,很多初学者甚至中 ...

  2. Linux系统运行级别配置

    Linux的运行级别 Linux的运行级别有七种,可以通过查看/etc/inittab文件进行了解: Level0:系统停机状态,默认系统运行级别不能设置为0,否则系统不能正常启动: Level1:单 ...

  3. Google maps api demo 2

    demo /** * @fileoverview Sample showing capturing a KML file click * and displaying the contents in ...

  4. UVA 10214 Trees in a Wood(欧拉函数)

    题意:给你a.b(a<=2000,b<=2000000),问你从原点可以看到范围在(-a<=x<=a,-b<=y<=b)内整数点的个数 题解:首先只需要计算第一象限 ...

  5. Linux嵌入式 -- 内核简介(x86)

    0. 嵌入式系统 以应用为中心,软硬件可裁剪,对功耗.对体积.对成本等都有严格要求的专用计算机系统. 1.  linux体系结构 2. 为什么 划分为 用户空间 和 内核控件 ?  分两级,内核和应用 ...

  6. Standard 1.1.x VM与Standard VM的区别

    在Eclipse或MyEclipse中要设置Installed JREs时,有三个选择: - Execution Environment Description - Standard 1.1.x VM ...

  7. Linux 增加对外开放的端口

    查看端口是否对外开放 /etc/init.d/iptables status # /etc/init.d/iptables status 表格:filter Chain INPUT (policy A ...

  8. Pandas面板(Panel)

    面板(Panel)是3D容器的数据.面板数据一词来源于计量经济学,部分源于名称:Pandas - pan(el)-da(ta)-s. 3轴(axis)这个名称旨在给出描述涉及面板数据的操作的一些语义. ...

  9. Kubernetes源码之旅:从kubectl到API Server

    概述: Kubernetes项目目前依然延续着之前爆炸式的扩张.急需能够理解Kubernetes原理并且贡献代码的软件开发者.学习Kubernetes源码并不容易.Kubernetes是使用相对年轻的 ...

  10. 拖拽窗口的实现-JQuery实现;

    主要是距离的掌握 如图,原始位置和当前位置. 对于当前位置:想要求得left值b',需要b'=a'-c; 其中,a’= ev.pageX;就是指针当前距离文档左边的距离: 同时,可以发现c在拖拽过程中 ...