在用python实现复杂链表复制的时候,在最后一步分离原链表与复制的链表时,一开始用的是如下代码“”“”中的部分,但是会报错,因为没有写if判断语句,有可能p已经是最后一个节点,这样p.next.next就为空.
# -*- 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):
# write code here
if pHead is None:
return
p = pHead
while p != None:
c = RandomListNode(p.label)
c.next = p.next
p.next = c
p = p.next.next
p = pHead
while p != None:
p_c = p.next
if p.random:
p_c.random = p.random.next
p = p.next.next
'''
p_c_head = pHead.next
p = pHead
while p != None:
p_c = p.next
p.next =p_c.next
#有可能p_c是最后一个节点,p_c.next为空
if p_c.next != None:
p_c.next = p_c.next.next
else:
p_c.next = None
p = p.next
'''
#上段注释掉的代码必须在训练里加上判断语句
#因为p_c.next有可能为空
# 下述方法若p不为空,才会将上一个p_clone.next赋值为p.next,不会出现上述的情况
p_c_head = p_c = pHead.next
p = pHead
p.next = p_c.next
p = p.next
while p != None:
p_c.next = p.next
p_c = p_c.next
p.next = p_c.next
p = p_c.next
return p_c_head