zoukankan      html  css  js  c++  java
  • 剑指offer-35复杂链表的复制

    题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

    1.三步法

    第一步:在复杂链表的原始节点N后面创建对应节点N'

    第二步:设置复制节点的random

    第三步:把链表拆成两个链表

     1 class Solution:
     2     # 返回 RandomListNode
     3     def Clone(self, pHead):
     4         # write code here
     5         if not pHead:
     6             return pHead
     7         #1.复制对应节点
     8         pnode=pHead
     9         while pnode:
    10             head2 = RandomListNode(pnode.label)
    11             head2.next=pnode.next
    12             pnode.next=head2
    13             pnode=head2.next
    14         pnode2=pHead
    15         #2.设置节点的random值,下面两种写法都可
    16         
    17         # while pnode2 and pnode2.next:
    18         #     temp=pnode2.random
    19         #     if temp:
    20         #         pnode2.next.random=temp.next
    21         #     pnode2=pnode2.next.next
    22         #写法二:
    23         while pnode2:
    24             temp=pnode2.next
    25             if pnode2.random:
    26                 temp.random=pnode2.random.next
    27             pnode2=temp.next
    28         #3.拆分链表
    29         pnode4=pHead
    30         copyhead=pHead.next
    31         pnode3=copyhead
    32         while pnode3 :
    33             pnode4.next=pnode3.next
    34             pnode4=pnode4.next
    35             if pnode4:
    36                 pnode3.next=pnode4.next
    37             else:
    38                 pnode3.next=None
    39             pnode3=pnode3.next
    40 
    41         return  copyhead

    小结:1.后面用到该节点的next时,一定要先判断节点是否为空

    2.一个链表拆为两个节点是,注意两个链表后面都要置空。

  • 相关阅读:
    L391 弦理论
    L390 Business meeting English
    L389 ABDDC
    L388 Five Ways to Manage Travel Sickness
    L386 DACBD
    Spring 中拦截器与过滤器的区别
    Hibernate中,left join、inner join以及left join fetch区别(转)
    java读取配置文件的几种方法
    Struts1和Struts2的区别和对比(完整版)
    面试题之String str = new String("abc"); 创建了几个对象
  • 原文地址:https://www.cnblogs.com/wanrongshu/p/12752408.html
Copyright © 2011-2022 走看看