复杂链表的复制(important!)

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

python solution:

# -*- coding:utf-8 -*-
class RandomListNode:
    def __init__(self, x):
        self.label = x
        self.next = None
        self.random = None

class Solution:
    # 返回 RandomListNode
    def Clone(self, pHead):
        if pHead is None:
            return None
        current = pHead
        #在原来的结点之后复制每个结点
        while current is not None:
            newnode = RandomListNode(current.label)
            nextnode = current.next
            current.next = newnode
            newnode.next = nextnode
            current = nextnode
        current = pHead
        #重新遍历链表给随机指针赋值
        while current is not None:
            if current.random is not None:
                current.next.random = current.random.next
            current = current.next.next
        #拆分链表,将链表拆分为原链表和复制后的链表
        current = pHead
        newhead = pHead.next
        while current is not None:
            clonenode = current.next
            current.next = clonenode.next
            if clonenode.next is not None:
                clonenode.next = clonenode.next.next
            current = current.next
        return newhead
posted @ 2019-03-02 17:52  bernieloveslife  阅读(155)  评论(0编辑  收藏  举报