最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java復(fù)雜鏈表的復(fù)制詳解

 更新時(shí)間:2022年01月25日 11:49:03   作者:Fly?upward  
復(fù)雜鏈表指的是一個(gè)鏈表有若干個(gè)結(jié)點(diǎn),每個(gè)結(jié)點(diǎn)有一個(gè)數(shù)據(jù)域用于存放數(shù)據(jù),還有兩個(gè)指針域,其中一個(gè)指向下一個(gè)節(jié)點(diǎn),還有一個(gè)隨機(jī)指向當(dāng)前復(fù)雜鏈表中的任意一個(gè)節(jié)點(diǎn)或者是一個(gè)空結(jié)點(diǎn),我們來(lái)探究一下在Java中復(fù)雜鏈表的復(fù)制

1.題目

請(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。

題目來(lái)源:力扣(LeetCode)

鏈接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof

2.解法

2.1 拼接+拆分

首先我們逐個(gè)將節(jié)點(diǎn)復(fù)制并且和原來(lái)的鏈表連起來(lái)得新鏈表;

然后再構(gòu)建新鏈表的random 指向。當(dāng)訪問(wèn)原節(jié)點(diǎn) cur 的隨機(jī)指向節(jié)點(diǎn) cur.random 時(shí),對(duì)應(yīng)新節(jié)點(diǎn) cur.next 的隨機(jī)指向節(jié)點(diǎn)為 cur.random.next 

將得到的新鏈表之間的復(fù)制節(jié)點(diǎn)拆分出來(lái)連成一個(gè)復(fù)制鏈表,拆分成原鏈表和復(fù)制鏈表。

鏈表圖

 復(fù)制節(jié)點(diǎn)

 將復(fù)制節(jié)點(diǎn)的random.next 連接起來(lái)

 拆分成兩個(gè)鏈表

3.代碼

class Solution {
    public Node copyRandomList(Node head) {
        if(head == null) {
            return null;
        }        
        //1.復(fù)制各個(gè)鏈表,并連接
        Node cur = head;
        while (cur != null) {
            //復(fù)制
            Node prev = new Node(cur.val);
            prev.next = cur.next;
            //連接
            cur.next = prev;
            //往后走
            cur = prev.next;
        }
        //2.構(gòu)建各新節(jié)點(diǎn)的random 指向
        cur = head;
        while (cur != null) {
            if (cur.random != null) {
                cur.next.random = cur.random.next;
            }
            cur = cur.next.next;
        }
        //3.拆分復(fù)制的鏈表
        cur = head.next;
        Node node = head;
        Node nodeNext = head.next;
        while (cur.next != null) {
            node.next = node.next.next;
            cur.next = cur.next.next;
            node = node.next;
            cur = cur.next;
        }
        node.next = null;//尾節(jié)點(diǎn)
        return nodeNext;//返回新鏈表的頭結(jié)點(diǎn)
    }
}

到此這篇關(guān)于Java復(fù)雜鏈表的復(fù)制詳解的文章就介紹到這了,更多相關(guān)Java 復(fù)雜鏈表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

新乐市| 霸州市| 罗甸县| 济南市| 资溪县| 仙居县| 河北省| 信宜市| 虎林市| 东源县| 兰坪| 贞丰县| 抚宁县| 息烽县| 湘西| 涿鹿县| 中阳县| 海门市| 平泉县| 农安县| 洪洞县| 峨山| 蒲城县| 桐梓县| 兰考县| 芦溪县| 罗山县| 织金县| 富阳市| 历史| 哈巴河县| 淄博市| 平定县| 澄江县| 宜良县| 上杭县| 平塘县| 滦南县| 云南省| 涡阳县| 南阳市|