剑指offer 复杂链表复制
2018-03-21 18:00
555 查看
题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解题思路:
1、复制每个节点,如:复制节点A得到A1,将A1插入节点A后面
2、遍历链表,A1->random = A->random->next;
3、将链表拆分成原链表和复制后的链表
注意:在拆分的时候必须同时拆分,不能想着先拆分原始链表再拆分复制链表,必须同时拆分,因为如果打算先拆分一个链表拆分完后链表已经不再包含另一个链表的节点了(是一个思维的小误区,一开始没反应过来)。
答案:
自己的代码写的太丑了,粘了的别人的代码。
链接:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 来源:牛客网 # -*- 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 not pHead: return None dummy = pHead # first step, N' to N next while dummy: dummynext = dummy.next copynode = RandomListNode(dummy.label) copynode.next = dummynext dummy.next = copynode dummy = dummynext dummy = pHead # second step, random' to random' while dummy: dummyrandom = dummy.random copynode = dummy.next if dummyrandom:#这里是因为随机节点可能为空,一开始没有考虑到。 copynode.random = dummyrandom.next dummy = copynode.next # third step, split linked list dummy = pHead copyHead = pHead.next while dummy: copyNode = dummy.next dummynext = copyNode.next dummy.next = dummynext if dummynext: copyNode.next = dummynext.next else: copyNode.next = None dummy = dummynext return copyHead
相关文章推荐
- 剑指offer——面试题26:复杂链表的复制
- 剑指offer面试题26:复杂链表的复制
- 码农小汪-剑指Offer之23 -复杂链表的复制
- 剑指offer: 复杂链表的复制
- 剑指offer面试题26之复杂链表的复制问题
- 剑指offer 26 复杂链表的复制
- 剑指Offer——复杂链表的复制
- 剑指offer 复杂链表的复制
- 剑指offer—复杂链表的复制
- 剑指offer-面试题26 复杂链表的复制
- 剑指Offer24 复杂链表的复制
- 【剑指Offer面试编程题】题目1524:复杂链表的复制--九度OJ
- 【剑指offer】复杂链表的复制
- 剑指Offer面试题26(Java版):复杂链表的复制
- 剑指Offer-复制复杂链表
- 剑指offer 面试题26复杂链表的复制
- 剑指offer—复杂链表的复制
- 【剑指Offer面试编程题】题目1524:复杂链表的复制--九度OJ
- 剑指offer 复杂链表的复制
- 剑指Offer-复杂链表的复制