剑指offer 26 复杂链表的复制

来源:互联网 发布:淘宝如何查看买家评价 编辑:程序博客网 时间:2024/05/17 08:54

题目描述

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

思路:

用一个辅助字典,存储原链表和复制链表的对应关系。第二次遍历的时候,生成random节点。

# -*- coding:utf-8 -*-# class RandomListNode:#     def __init__(self, x):#         self.label = x#         self.next = None#         self.random = Noneclass Solution:    # 返回 RandomListNode    def Clone(self, pHead):        # write code here        if pHead == None:            return None        random_dict = {}        cHead = RandomListNode(0)        cNode = cHead        pNode = pHead        while pNode != None:            cNode.label = pNode.label            cNode.next = RandomListNode(0)            random_dict[pNode] = cNode            pNode = pNode.next            if pNode == None:                cNode.next = None            else:                cNode = cNode.next        pNode = pHead        cNode = cHead        while pNode != None:            if pNode.random == None:                random_dict[pNode].random = None            else:                random_dict[pNode].random = random_dict[pNode.random]            pNode = pNode.next        return cHead
原创粉丝点击