zoukankan      html  css  js  c++  java
  • 剑指offer-第四章解决面试题思路(复杂链表的复制)

    题目:请写一个函数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);
        }
       
    }
  • 相关阅读:
    WinowsXP 任务栏无法显示当前运行程序图标
    日志记录组件[Log4net]详细介绍(转)
    桌面上的IE图标变成了快捷方式那种图标 怎么还原回来
    面试必须要知道的SQL语法,语句(转载)
    兼容 火狐 IE 的JS时间控件 任意格式 年月日时分秒
    Nagios远程监控软件的安装与配置详解(1)
    linux集群 负载均衡实验笔记
    PHPB2B 模板 标签
    PHP 去除 HTML 回车 换行 空格
    OpenX参考网址
  • 原文地址:https://www.cnblogs.com/hupp/p/4742152.html
Copyright © 2011-2022 走看看