欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线

劍指offer:復(fù)雜鏈表的復(fù)制

題目描述
輸入一個(gè)復(fù)雜鏈表(每個(gè)節(jié)點(diǎn)中有節(jié)點(diǎn)值,以及兩個(gè)指針,一個(gè)指向下一個(gè)節(jié)點(diǎn),另一個(gè)特殊指針指向任意一個(gè)節(jié)點(diǎn)),返回結(jié)果為復(fù)制后復(fù)雜鏈表的head。(注意,輸出結(jié)果中請(qǐng)不要返回參數(shù)中的節(jié)點(diǎn)引用,否則判題程序會(huì)直接返回空)

靈寶網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站

# -*- coding: utf-8 -*-
# @Time         : 2019-07-05 15:52
# @Author       : Jayce Wong
# @ProjectName  : job
# @FileName     : complexListNodeClone.py
# @Blog         : https://blog.51cto.com/jayce1111
# @Github       : https://github.com/SysuJayce

class RandomListNode:
    def __init__(self, x):
        self.label = x
        self.next = None
        self.random = None

"""
    解法1:
    直接復(fù)制鏈表的話,由于每個(gè)節(jié)點(diǎn)有一個(gè)隨機(jī)指針指向任意的位置(包括空指針),因此如果用最樸素的方法
    來解決,需要在將所有節(jié)點(diǎn)復(fù)制完之后,對(duì)每個(gè)節(jié)點(diǎn)的random屬性遍歷一次整個(gè)鏈表,因此假設(shè)共有n個(gè)
    節(jié)點(diǎn),那么這種最樸素的解法的時(shí)間復(fù)雜度為O(n^2)

    解法2:
    解法1之所以效率低是因?yàn)槊總€(gè)節(jié)點(diǎn)的random指針的指向需要遍歷整個(gè)鏈表才能找到,如果我們犧牲空間來
    換時(shí)間的話,那么就可以做到時(shí)間復(fù)雜度為O(n), 額外使用空間O(n)。
    具體做法可以是用一個(gè)字典來保存每個(gè)節(jié)點(diǎn)及其對(duì)應(yīng)的克隆節(jié)點(diǎn)的地址,這樣就可以通過查詢這個(gè)哈希表在
    O(1)的時(shí)間內(nèi)找到random指針?biāo)赶虻墓?jié)點(diǎn)

    解法3:
    解法2之所以能把時(shí)間復(fù)雜度降下來,是因?yàn)楸4媪嗽脊?jié)點(diǎn)和對(duì)應(yīng)克隆節(jié)點(diǎn)的位置關(guān)系,因此可以很快找到
    原始節(jié)點(diǎn)對(duì)應(yīng)的克隆節(jié)點(diǎn)在哪。如果我們?cè)趶?fù)制鏈表的時(shí)候就讓克隆節(jié)點(diǎn)跟在原始節(jié)點(diǎn)后面,那么就可以在
    不額外使用哈希表的情況下做到時(shí)間復(fù)雜度為O(n)了
"""

class Solution2:
    def Clone(self, pHead):
        if not pHead:
            return None
        nodeTable = dict()  # 用于保存原始節(jié)點(diǎn)對(duì)應(yīng)的克隆節(jié)點(diǎn)的地址
        pClone = RandomListNode(pHead.label)
        # 由于節(jié)點(diǎn)類型無法哈希,因此用地址作為key
        nodeTable[id(pHead)] = pClone

        pNode = pHead
        pNode = pNode.next
        cloneNode = pClone
        # 這個(gè)循環(huán)用于將原始鏈表復(fù)制出來,但是先忽略random指針,關(guān)鍵在于要用這個(gè)字典保存
        # 原始節(jié)點(diǎn)和對(duì)應(yīng)克隆節(jié)點(diǎn)的地址
        while pNode:
            cloneNode.next = RandomListNode(pNode.label)
            nodeTable[id(pNode)] = cloneNode.next
            cloneNode = cloneNode.next
            pNode = pNode.next

        # 根據(jù)字典保存的信息設(shè)置克隆鏈表的random指針
        cloneNode = pClone
        while pHead:
            # 需要注意的是random指針可能是指向None,而我們?cè)谧值渲胁]有保存None的key
            if pHead.random:
                cloneNode.random = nodeTable[id(pHead.random)]
            pHead = pHead.next
            cloneNode = cloneNode.next

        return pClone

class Solution3:
    def Clone(self, pHead):
        # 解法3的思路可以分為三步:
        # 1. 復(fù)制整個(gè)鏈表,這里先忽略random指針的指向,得到形如A->A'->B->B'->C->C'的復(fù)制結(jié)果
        # 2. 設(shè)置克隆節(jié)點(diǎn)的random指針
        # 3. 將鏈表拆分成原始鏈表和克隆鏈表
        self.cloneNode(pHead)
        self.connectSiblingNode(pHead)
        return self.reconnectNode(pHead)

    def cloneNode(self, pHead):
        pNode = pHead
        while pNode:
            pClone = RandomListNode(pNode.label)
            pClone.next = pNode.next
            pNode.next = pClone
            pNode = pClone.next

    def connectSiblingNode(self, pHead):
        pNode = pHead
        while pNode:
            clone_head = pNode.next
            if pNode.random:
                clone_head.random = pNode.random.next
            pNode = clone_head.next

    def reconnectNode(self, pHead):
        if not pHead:
            return None
        new_head = pHead.next
        pNode = new_head
        """
        這里不知為什么,如果把pHead指向new_head的左邊(即pHead和new_head分別指向A和A')
        然后進(jìn)入循環(huán)就不能通過牛客的OJ,

        但是將pHead指向new_head的右邊(即pHead和new_head分別指向B和A')
        然后進(jìn)入循環(huán)就可以通過。

        這兩種方法在本地調(diào)試的時(shí)候都是沒問題的。
        """
        pHead.next = pNode.next
        pHead = pHead.next
        while pHead:
            pNode.next = pHead.next
            pNode = pNode.next
            pHead.next = pNode.next
            pHead = pHead.next

        return new_head

def main():
    # 1->3
    # 2->1
    # 3->2
    # node = RandomListNode(1)
    # node.next = RandomListNode(2)
    # node.next.next = RandomListNode(3)
    # node.random = node.next.next
    # node.next.random = node
    # node.next.next.random = node.next

    node1 = RandomListNode(1)
    node2 = RandomListNode(2)
    node3 = RandomListNode(3)
    node4 = RandomListNode(4)
    node5 = RandomListNode(5)
    node1.next = node2
    node2.next = node3
    node3.next = node4
    node4.next = node5
    node1.random = node3
    node2.random = node5
    node4.random = node2

    solution = Solution2()
    head = solution.Clone(node1)
    while head:
        if head.random:
            print(head.label, head.random.label)
        else:
            print(head.label, 'None')
        head = head.next

if __name__ == '__main__':
    main()

文章標(biāo)題:劍指offer:復(fù)雜鏈表的復(fù)制
本文路徑:http://www.kartarina.com/article4/jecpoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)網(wǎng)站內(nèi)鏈ChatGPTGoogle云服務(wù)器移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线
3751色影院一区二区三区| 亚洲国产中文字幕| 2020国产精品久久精品美国| 偷拍亚洲欧洲综合| 3atv在线一区二区三区| 蜜桃视频在线观看一区| 日韩欧美你懂的| 国产乱妇无码大片在线观看| 日韩三级在线观看| 国产乱码精品一品二品| 国产精品美女久久久久久久| 色综合色综合色综合色综合色综合| 欧美最新大片在线看| 亚洲第四色夜色| 欧美一区二区三级| 丰满少妇在线播放bd日韩电影| 国产精品日产欧美久久久久| 久久久久88色偷偷免费| 国产精品亚洲一区二区三区在线 | 亚洲欧洲综合另类在线| 欧美日韩一级片在线观看| 蜜桃一区二区三区在线| 亚洲欧美激情在线| 久久综合色天天久久综合图片| 国产xxx精品视频大全| 亚洲成a人v欧美综合天堂| 久久久久久久久久久黄色| 日本精品一级二级| 国产精品123区| 日本成人中文字幕| 樱桃国产成人精品视频| 国产日韩欧美精品一区| 欧美mv和日韩mv国产网站| 在线观看日韩电影| 白白色亚洲国产精品| 精品一区二区影视| 亚洲1区2区3区4区| 一级精品视频在线观看宜春院| 国产精品麻豆视频| 久久精品综合网| 久久午夜色播影院免费高清| 成人sese在线| 蜜臀av一区二区在线免费观看| 亚洲视频在线一区二区| 久久爱www久久做| 日韩久久一区二区| 中文字幕av一区二区三区免费看| 日韩精品一区二区三区swag| 欧美二区乱c少妇| 欧美日韩亚洲综合在线 | 狠狠狠色丁香婷婷综合激情| 日欧美一区二区| 日韩高清不卡在线| 午夜av一区二区| 亚洲福利视频一区二区| 一区二区三区国产精品| 亚洲猫色日本管| 亚洲一区二区偷拍精品| 一区二区三区成人| 午夜精品免费在线观看| 热久久一区二区| 国内精品伊人久久久久av影院 | 精品久久久久av影院| 欧美成人精品福利| 日韩欧美国产综合| 国产日韩欧美高清在线| 国产精品国产三级国产aⅴ入口| 国产精品免费久久| 亚洲精品中文字幕乱码三区| 一区二区三区四区在线| 91视频www| 色综合婷婷久久| 欧美日韩一级黄| 久久综合中文字幕| 国产偷v国产偷v亚洲高清| 日本一区二区三区四区在线视频 | 成人免费视频免费观看| 成人av在线网| 欧美日韩国产大片| 亚洲精品在线免费观看视频| 日本一区二区免费在线| 1024精品合集| 日本vs亚洲vs韩国一区三区二区| 国产美女久久久久| 色伊人久久综合中文字幕| 欧美日韩久久不卡| 国产午夜精品理论片a级大结局| 中文字幕在线不卡国产视频| 亚洲成av人片观看| 高清成人免费视频| 717成人午夜免费福利电影| 欧美精品一区二区三区视频 | 精品国产伦理网| **网站欧美大片在线观看| 天堂成人国产精品一区| 国产精品99久久久久久似苏梦涵| 色婷婷综合五月| 精品黑人一区二区三区久久| 亚洲乱码一区二区三区在线观看| 麻豆91在线观看| 在线观看欧美日本| 久久久亚洲午夜电影| 亚洲国产精品天堂| 成人动漫一区二区在线| 精品成人佐山爱一区二区| 亚洲最新视频在线观看| 国产成人精品免费| 精品国产一区二区三区久久影院 | 国产美女精品在线| 欧美精品丝袜中出| 中文字幕一区二区三区av| 日本va欧美va欧美va精品| 91蝌蚪porny| 中文久久乱码一区二区| 理论片日本一区| 91麻豆精品91久久久久同性| 亚洲日本va在线观看| 国产91丝袜在线18| 久久久综合视频| 卡一卡二国产精品| 337p亚洲精品色噜噜| 亚洲永久免费av| 日本丶国产丶欧美色综合| 国产精品久久久久影院亚瑟| 国产酒店精品激情| 久久夜色精品一区| 国产美女精品一区二区三区| 日韩亚洲欧美中文三级| 午夜精品久久久久久久蜜桃app| 在线视频国内一区二区| 一区二区三区不卡视频| 欧美在线观看一区| 婷婷久久综合九色综合伊人色| 在线观看91精品国产入口| 亚洲精选免费视频| 91亚洲午夜精品久久久久久| 国产精品毛片大码女人| 成人av综合一区| 亚洲欧美日韩一区二区三区在线观看| 国产suv精品一区二区6| 亚洲欧美在线视频| 91麻豆福利精品推荐| 亚洲高清久久久| 欧美一区二区视频在线观看2020| 日韩国产欧美三级| 精品国产免费久久| 成人中文字幕合集| 夜夜亚洲天天久久| 日韩一区二区三| 国产在线精品一区二区不卡了| 国产欧美日韩不卡免费| 91女厕偷拍女厕偷拍高清| 一区二区高清免费观看影视大全| 欧美三级视频在线观看| 看片的网站亚洲| 国产精品国产a级| 欧美日韩精品一区视频| 精品在线观看视频| 亚洲图片欧美激情| 日韩一区二区免费在线观看| 国产又粗又猛又爽又黄91精品| 亚洲国产精品黑人久久久| 欧美私模裸体表演在线观看| 久久国产尿小便嘘嘘尿| 亚洲欧洲日韩av| 日韩亚洲欧美一区| 成人av电影在线网| 婷婷一区二区三区| 欧美国产日本韩| 欧美乱熟臀69xxxxxx| 精品国产sm最大网站免费看| 另类小说一区二区三区| 国产精品丝袜一区| 日本韩国一区二区| 久久99热狠狠色一区二区| 国产三区在线成人av| 欧美日韩精品一区视频| 国内精品在线播放| 亚洲一区二区三区四区五区黄 | 国产精品伦一区| 91精品国产一区二区三区| 成人av资源在线观看| 日韩av一区二区在线影视| 国产精品不卡视频| 丝袜a∨在线一区二区三区不卡| 久久香蕉国产线看观看99| www.日韩av| 麻豆91免费看| 亚洲国产aⅴ天堂久久| 久久久.com| 在线不卡一区二区| 91蜜桃在线观看| 粉嫩av亚洲一区二区图片| 奇米精品一区二区三区四区| 夜夜操天天操亚洲| 国产精品成人一区二区三区夜夜夜| 日韩午夜在线观看| 91精品国产综合久久小美女| 欧美三级中文字| 欧美一卡在线观看|