From 75a3c776f064e57fe035362e07b55af3ad3eef00 Mon Sep 17 00:00:00 2001 From: liseningg <64001103+liseningg@users.noreply.github.com> Date: Tue, 9 Jun 2020 11:34:50 +0800 Subject: [PATCH] Update code.py --- .../code.py" | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git "a/\345\211\221\346\214\207offer/025-\345\244\215\346\235\202\351\223\276\350\241\250\347\232\204\345\244\215\345\210\266/code.py" "b/\345\211\221\346\214\207offer/025-\345\244\215\346\235\202\351\223\276\350\241\250\347\232\204\345\244\215\345\210\266/code.py" index ed824fe..0542cc9 100644 --- "a/\345\211\221\346\214\207offer/025-\345\244\215\346\235\202\351\223\276\350\241\250\347\232\204\345\244\215\345\210\266/code.py" +++ "b/\345\211\221\346\214\207offer/025-\345\244\215\346\235\202\351\223\276\350\241\250\347\232\204\345\244\215\345\210\266/code.py" @@ -37,4 +37,41 @@ def Clone(pHead): p.next.next = RandomListNode(3) p.next.next.next = RandomListNode(4) p.next.next.next.next = RandomListNode(5) -print(Clone(p)) \ No newline at end of file +print(Clone(p)) + + +class Solution: + # 返回 RandomListNode + def Clone(self, pHead): + # 深拷贝也可以 + # return copy.deepcopy(pHead) + + # 复制一个一样的node,并且添加到之前的链表的每一个node后面 + if pHead == None: + return None + + pTmp = pHead + while pTmp: + node = RandomListNode(pTmp.label) + node.next = pTmp.next + pTmp.next = node + pTmp = node.next #将指针移动到下一个被复制的节点 + + # 实现新建的node的random的指向 + pTmp = pHead + while pTmp: + if pTmp.random: + pTmp.next.random = pTmp.random.next + pTmp = pTmp.next.next + + # 断开原来的node和新node的连接 + pTmp = pHead + newHead = pHead.next #保存复制链表后的第二个元素的地址 + pNewTmp = pHead.next + while pTmp: + pTmp.next = pTmp.next.next + if pNewTmp.next: + pNewTmp.next = pNewTmp.next.next + pNewTmp = pNewTmp.next + pTmp = pTmp.next + return newHead