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);
        }
       
    }
  • 相关阅读:
    git版本库管理介绍,撤销git pull操作
    【laravel5.4】自定义404、503等页面
    【laravel5.4】{{$name}}、{{name}}、@{{$name}} 和 @{{name}} 的区别
    python 了解一点属性的延迟计算
    python 了解一下__dict__
    excel怎么把一个sheet的 全部内容打印到一页纸上
    python 简单了解一下 描述器
    python 调用父类方法, 重写父类构造方法, 不显式调用,会报错
    Python 今天抽空学习了@Property
    python 语法糖是什么意思
  • 原文地址:https://www.cnblogs.com/hupp/p/4742152.html
Copyright © 2011-2022 走看看