国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Leetcode-每日一題【劍指 Offer 35. 復(fù)雜鏈表的復(fù)制】

這篇具有很好參考價(jià)值的文章主要介紹了Leetcode-每日一題【劍指 Offer 35. 復(fù)雜鏈表的復(fù)制】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目

請(qǐng)實(shí)現(xiàn)?copyRandomList?函數(shù),復(fù)制一個(gè)復(fù)雜鏈表。在復(fù)雜鏈表中,每個(gè)節(jié)點(diǎn)除了有一個(gè)?next?指針指向下一個(gè)節(jié)點(diǎn),還有一個(gè)?random?指針指向鏈表中的任意節(jié)點(diǎn)或者?null

示例 1:

Leetcode-每日一題【劍指 Offer 35. 復(fù)雜鏈表的復(fù)制】,leetcode,算法,職場和發(fā)展,java,數(shù)據(jù)結(jié)構(gòu)

輸入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
輸出:[[7,null],[13,0],[11,4],[10,2],[1,0]]

示例 2:

Leetcode-每日一題【劍指 Offer 35. 復(fù)雜鏈表的復(fù)制】,leetcode,算法,職場和發(fā)展,java,數(shù)據(jù)結(jié)構(gòu)

輸入:head = [[1,1],[2,1]]
輸出:[[1,1],[2,1]]

示例 3:

Leetcode-每日一題【劍指 Offer 35. 復(fù)雜鏈表的復(fù)制】,leetcode,算法,職場和發(fā)展,java,數(shù)據(jù)結(jié)構(gòu)

輸入:head = [[3,null],[3,0],[3,null]]
輸出:[[3,null],[3,0],[3,null]]

示例 4:

輸入:head = []
輸出:[]
解釋:給定的鏈表為空(空指針),因此返回 null。

提示:

  • -10000 <= Node.val <= 10000
  • Node.random?為空(null)或指向鏈表中的節(jié)點(diǎn)。
  • 節(jié)點(diǎn)數(shù)目不超過 1000 。

解題思路

1.題目要求我們復(fù)制一個(gè)復(fù)雜鏈表。在這個(gè)復(fù)雜鏈表中,每個(gè)節(jié)點(diǎn)除了有一個(gè)?next?指針指向下一個(gè)節(jié)點(diǎn),還有一個(gè)?random?指針指向鏈表中的任意節(jié)點(diǎn)或者?null。我們可以用Map來實(shí)現(xiàn),詳情請(qǐng)查看【138.復(fù)制帶隨機(jī)指針的鏈表】,我們今天用另一種方法去實(shí)現(xiàn)。

2.舉個(gè)例子大家更容易理解

Leetcode-每日一題【劍指 Offer 35. 復(fù)雜鏈表的復(fù)制】,leetcode,算法,職場和發(fā)展,java,數(shù)據(jù)結(jié)構(gòu)

假如所給鏈表如上圖所示,首先我們要做的就是設(shè)置一個(gè) cur 節(jié)點(diǎn)去遍歷鏈表,在遍歷的同時(shí)將所有的節(jié)點(diǎn)復(fù)制一份,復(fù)制出來的每個(gè)節(jié)點(diǎn)都跟在原來節(jié)點(diǎn)的后面。如下圖所示。

Leetcode-每日一題【劍指 Offer 35. 復(fù)雜鏈表的復(fù)制】,leetcode,算法,職場和發(fā)展,java,數(shù)據(jù)結(jié)構(gòu)?節(jié)點(diǎn)復(fù)制完后我們會(huì)發(fā)現(xiàn),復(fù)制出來的節(jié)點(diǎn)random指針都為空,那么我們要做的就是要讀取出原節(jié)點(diǎn)的random指針的值,并且將它的后一個(gè)節(jié)點(diǎn)賦給復(fù)制出來的新節(jié)點(diǎn)的random(之所以是后一個(gè)節(jié)點(diǎn)是因?yàn)?,后一個(gè)節(jié)點(diǎn)才是我們的復(fù)制品)。

Leetcode-每日一題【劍指 Offer 35. 復(fù)雜鏈表的復(fù)制】,leetcode,算法,職場和發(fā)展,java,數(shù)據(jù)結(jié)構(gòu)

最后我們要做的工作就是將兩個(gè)鏈表拆分開來,也就是讓 3 的 next 不再指向 3‘ 而是指向 5,讓 3’ 的 next 重新指向 5‘,最后拆分完的結(jié)果如下圖所示。

Leetcode-每日一題【劍指 Offer 35. 復(fù)雜鏈表的復(fù)制】,leetcode,算法,職場和發(fā)展,java,數(shù)據(jù)結(jié)構(gòu)?這樣我們就得到了原鏈表的復(fù)印件,我們?cè)趶?fù)制鏈表和拆分鏈表的時(shí)候要注意空指針?,所以需要判斷一下。

代碼實(shí)現(xiàn)

class Solution {
    public Node copyRandomList(Node head) {
        if(head == null){
            return null;
        }
        //復(fù)制鏈表的節(jié)點(diǎn)
        Node cur = head;
        while(cur != null){
            Node next = cur.next;
            cur.next = new Node(cur.val);
            cur.next.next = next; 
            cur = next;
        }
        //復(fù)制隨機(jī)節(jié)點(diǎn)
        cur = head;
        while(cur != null){
            Node nextNode = cur.next;
            nextNode.random = cur.random == null ? null : cur.random.next;
            cur = cur.next.next;

        }
        //拆分鏈表
        Node newHead = head.next;
        cur = head;
        Node curHead = head.next;
        while(cur != null){
            cur.next = cur.next.next;
            cur = cur.next;
            curHead.next = cur == null ? null : cur.next;
            curHead = curHead.next;
        
        }
        return newHead;
    }
}

測試結(jié)果

Leetcode-每日一題【劍指 Offer 35. 復(fù)雜鏈表的復(fù)制】,leetcode,算法,職場和發(fā)展,java,數(shù)據(jù)結(jié)構(gòu)

?文章來源地址http://www.zghlxwxcb.cn/news/detail-671033.html

到了這里,關(guān)于Leetcode-每日一題【劍指 Offer 35. 復(fù)雜鏈表的復(fù)制】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Leetcode-每日一題【劍指 Offer 06. 從尾到頭打印鏈表】

    Leetcode-每日一題【劍指 Offer 06. 從尾到頭打印鏈表】

    輸入一個(gè)鏈表的頭節(jié)點(diǎn),從尾到頭反過來返回每個(gè)節(jié)點(diǎn)的值(用數(shù)組返回)。 示例 1: 輸入: head = [1,3,2] 輸出: [2,3,1] 限制: 0 = 鏈表長度 = 10000 1.題目要求我們從尾到頭反過來返回每個(gè)節(jié)點(diǎn)的值,這道題我們可以用棧去解決,但是我們還可以采用另一種方法。就是我們可以

    2024年02月13日
    瀏覽(19)
  • 每日一題——復(fù)雜鏈表的復(fù)制

    每日一題——復(fù)雜鏈表的復(fù)制

    題目鏈接 如果不考慮 random 指針的復(fù)制,僅僅復(fù)制單鏈表的結(jié)構(gòu)還是簡單的。只需要通過一個(gè)指針 cur 遍歷原鏈表,再不斷創(chuàng)建新節(jié)點(diǎn)尾插到 newHead 后即可。 但如果要考慮 random 指針的復(fù)制,那過程就復(fù)雜了。 有小伙伴會(huì)這樣想:既然原鏈表和復(fù)制的鏈表的結(jié)構(gòu)一致,那么對(duì)

    2024年02月14日
    瀏覽(15)
  • Leetcode-每日一題【劍指 Offer 29. 順時(shí)針打印矩陣】

    Leetcode-每日一題【劍指 Offer 29. 順時(shí)針打印矩陣】

    輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。 示例 1: 輸入: matrix = [[1,2,3],[4,5,6],[7,8,9]] 輸出: [1,2,3,6,9,8,7,4,5] 示例 2: 輸入: matrix =?[[1,2,3,4],[5,6,7,8],[9,10,11,12]] 輸出: [1,2,3,4,8,12,11,10,9,5,6,7] 限制: 0 = matrix.length = 100 0 = matrix[i].length?= 100 1.題目要求

    2024年02月13日
    瀏覽(28)
  • Leetcode-每日一題【劍指 Offer 16. 數(shù)值的整數(shù)次方】

    Leetcode-每日一題【劍指 Offer 16. 數(shù)值的整數(shù)次方】

    實(shí)現(xiàn)?pow(x,?n)?,即計(jì)算 x 的 n 次冪函數(shù)(即,xn)。不得使用庫函數(shù),同時(shí)不需要考慮大數(shù)問題。 示例 1: 輸入: x = 2.00000, n = 10 輸出: 1024.00000 示例 2: 輸入: x = 2.10000, n = 3 輸出: 9.26100 示例 3: 輸入: x = 2.00000, n = -2 輸出: 0.25000 解釋: 2-2 = 1/22 = 1/4 = 0.25 提示: -10

    2024年02月13日
    瀏覽(22)
  • Leetcode-每日一題【劍指 Offer 26. 樹的子結(jié)構(gòu)】

    Leetcode-每日一題【劍指 Offer 26. 樹的子結(jié)構(gòu)】

    輸入兩棵二叉樹A和B,判斷B是不是A的子結(jié)構(gòu)。(約定空樹不是任意一個(gè)樹的子結(jié)構(gòu)) B是A的子結(jié)構(gòu), 即 A中有出現(xiàn)和B相同的結(jié)構(gòu)和節(jié)點(diǎn)值。 例如: 給定的樹 A: ? ? ?3 ? ? / ? ?4 ? 5 ? / ?1 ? 2 給定的樹 B: ? ?4? ? / ?1 返回 true,因?yàn)?B 與 A 的一個(gè)子樹擁有相同的結(jié)構(gòu)和節(jié)點(diǎn)

    2024年02月13日
    瀏覽(23)
  • (字符串 ) 劍指 Offer 05. 替換空格 ——【Leetcode每日一題】

    (字符串 ) 劍指 Offer 05. 替換空格 ——【Leetcode每日一題】

    難度:簡單 請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),把字符串 s 中的每個(gè) 空格 替換成 “ %20 ”。 示例 1: 輸入:s = “We are happy.” 輸出:“We%20are%20happy.” 限制 : 0 = s 的長度 = 10000 ??思路:雙指針法 如果想把這道題目做到 極致 ,就不要只用額外的輔助空間了! 首先擴(kuò)充數(shù)組到每個(gè)空格替換

    2024年02月08日
    瀏覽(30)
  • Leetcode-每日一題【劍指 Offer 27. 二叉樹的鏡像】

    Leetcode-每日一題【劍指 Offer 27. 二叉樹的鏡像】

    請(qǐng)完成一個(gè)函數(shù),輸入一個(gè)二叉樹,該函數(shù)輸出它的鏡像。 例如輸入: ? ? ?4 ? ?/ ? ? 2 ? ? 7 ?/ ? / 1 ? 3 6 ? 9 鏡像輸出: ? ? ?4 ? ?/ ? ? 7 ? ? 2 ?/ ? / 9 ? 6 3? ?1 示例 1: 輸入: root = [4,2,7,1,3,6,9] 輸出: [4,7,2,9,6,3,1] 限制: 0 = 節(jié)點(diǎn)個(gè)數(shù) = 1000 1.題目要求我們?cè)O(shè)

    2024年02月13日
    瀏覽(29)
  • Leetcode-每日一題【劍指 Offer 11. 旋轉(zhuǎn)數(shù)組的最小數(shù)字】

    Leetcode-每日一題【劍指 Offer 11. 旋轉(zhuǎn)數(shù)組的最小數(shù)字】

    把一個(gè)數(shù)組最開始的若干個(gè)元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉(zhuǎn)。 給你一個(gè)可能存在?重復(fù)?元素值的數(shù)組?numbers?,它原來是一個(gè)升序排列的數(shù)組,并按上述情形進(jìn)行了一次旋轉(zhuǎn)。請(qǐng)返回旋轉(zhuǎn)數(shù)組的最小元素。例如,數(shù)組?[3,4,5,1,2] 為 [1,2,3,4,5] 的一次旋轉(zhuǎn),該數(shù)組的

    2024年02月14日
    瀏覽(21)
  • (搜索) 劍指 Offer 12. 矩陣中的路徑 ——【Leetcode每日一題】

    (搜索) 劍指 Offer 12. 矩陣中的路徑 ——【Leetcode每日一題】

    難度:中等 給定一個(gè) m * n 二維字符網(wǎng)格 board 和一個(gè)字符串單詞 word 。如果 word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。 單詞必須按照字母順序,通過相鄰的單元格內(nèi)的字母構(gòu)成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個(gè)單元格內(nèi)的字母不允許

    2024年02月12日
    瀏覽(28)
  • Leetcode-每日一題【劍指 Offer 20. 表示數(shù)值的字符串】

    Leetcode-每日一題【劍指 Offer 20. 表示數(shù)值的字符串】

    ? 請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù)用來判斷字符串是否表示 數(shù)值 (包括整數(shù)和小數(shù))。 數(shù)值 (按順序)可以分成以下幾個(gè)部分: 若干空格 一個(gè)? 小數(shù) ?或者? 整數(shù) (可選)一個(gè)? \\\'e\\\' ?或? \\\'E\\\' ?,后面跟著一個(gè)? 整數(shù) 若干空格 小數(shù) (按順序)可以分成以下幾個(gè)部分: (可選)一個(gè)符號(hào)

    2024年02月13日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包