zoukankan      html  css  js  c++  java
  • 复杂链表的复制(python)

    一:问题描述
    输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

    二,分析

    先举个栗子,有如下链表,每个节点除了指向下个节点的next指针,还有一个random指针,其中,3的random指针指向他自己

    我们先做一个指针,叫kk,让他指向头节点

    kk=pHead

    如果kk不为空,就复制一个出来,叫他node

    node=RandomListNode(kk.label)

    用next指针连接起node和kk以及kk.next

    node.next=kk.next

    kk.next=node

     下一个

    kk=node.next

    直到复制了链表中的所有结点,并用next将他们连接起来

     第二步,复制random指针

    1结点的random指向5

    复制出来的1的random就该指向复制出来的5

    此时,复制出来的5是原来的5的下一项

    kk.random.next=kk.next.random

    one by one直到全部复制完成

     第三步,分离两个链表

    再做两个新的指针,一个叫ee,指向新链表的表头,就放那不动,等着输出

    一个叫nn,他负责遍历新链表,而kk负责遍历旧的链表

    让旧的指向旧的,新的指向新的

    kk.next=kk.next.next

    nn.next=nn.next.next

    最后输出ee

     

     结束

    三,代码

     

  • 相关阅读:
    1091 Acute Stroke
    1092 To Buy or Not to Buy
    1093 Count PAT's
    1094 The Largest Generation
    1095 Cars on Campus
    1096 Consecutive Factors
    1097 Deduplication on a Linked List
    2.掌握Python基本数据类型,从python陌路人到熟人!
    Python基础语法,他其实很贵!
    某外企软件测试面试题整理(更新中)
  • 原文地址:https://www.cnblogs.com/buyaodong/p/13183407.html
Copyright © 2011-2022 走看看