国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[LintCode/LeetCode] Copy List with Random Pointer

Jacendfeng / 3708人閱讀

摘要:大體意思就是,先復制到,順便將所有的放在再復制所有的到,順便將所有的放在最后令,令,將和分離,返回的頭結(jié)點

Problem

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Challenge

Could you solve it with O(1) space?

Note

因為O(1) space,所以no hashtable。新建兩個結(jié)點n1 n2,令n1 = head,向后循環(huán),同時不斷復制n2n1.next;再放回頭結(jié)點,循環(huán)第二次,復制n2.randomn1.random.next,再放回頭結(jié)點;再建立第三個結(jié)點n3 = n2,循環(huán)第三次,令n1 n2分離,返回頭結(jié)點n3,結(jié)束。

大體意思就是,先復制n1到n2,順便將所有的n2放在n1.next;再復制所有的n1.random到n2.random,順便將所有的n2.random放在n1.random.next;最后令n3 = n2,令n1 = n1.next.next, n2 = n2.next.next, 將n1和n2分離,返回n2的頭結(jié)點n3.

Solution
public class Solution {
    public RandomListNode copyRandomList(RandomListNode head) {
        if (head == null) return null;
        RandomListNode n1 = head, n2, n3;
        while (n1 != null) {
            n2 = new RandomListNode(n1.label);
            n2.next = n1.next;
            n1.next = n2;
            n1 = n1.next.next;
        }
        n1 = head;
        n2 = n1.next;
        while (n1 != null) {
            n2.random = n1.random == null ? null : n1.random.next;
            n1 = n1.next.next;
            n2 = n1 == null ? null : n2.next.next;
        }
        n1 = head;
        n2 = n1.next;
        n3 = n2;
        while (n1 != null) {
            n1.next = n1.next.next;
            n2.next = n2.next == null ? null : n2.next.next;
            n1 = n1.next;
            n2 = n2.next;
        }
        return n3;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/65836.html

相關(guān)文章

  • [Leetcode] Copy List with Random Pointer 復制隨機指針

    摘要:棧迭代復雜度時間空間如果不算新鏈表的空間則是思路由于隨機指針有可能產(chǎn)生環(huán)路,我們不能直接沿著隨機指針的方向一個一個復制。同時我們又不能沿著指針直接復制,因為我們不知道隨機指針所指向的新節(jié)點是哪個。 Copy List with Random Pointer A linked list is given such that each node contains an additiona...

    Olivia 評論0 收藏0
  • leetcode138. Copy List with Random Pointer

    摘要:題目要求假設(shè)存在這樣一個鏈表,在鏈表的每一個節(jié)點中,除了記錄了自身值和指向下一個節(jié)點的指針,還有一個隨機指針指向鏈表中任意一個節(jié)點。所以可以在兩次遍歷后完成任務。最后一圈遍歷,我們調(diào)整指針,恢復原鏈表和塑造新鏈表。 題目要求 A linked list is given such that each node contains an additional random pointer ...

    Kross 評論0 收藏0
  • [LintCode/LeetCode] Flatten Binary Tree to Linked

    Problem Flatten a binary tree to a fake linked list in pre-order traversal.Here we use the right pointer in TreeNode as the next pointer in ListNode. Example 1 1 ...

    TNFE 評論0 收藏0
  • LeetCode 138:復制帶隨機指針的鏈表 Copy List with Random Poin

    摘要:給定一個鏈表,每個節(jié)點包含一個額外增加的隨機指針,該指針可以指向鏈表中的任何節(jié)點或空節(jié)點。要求返回這個鏈表的深拷貝。提示你必須返回給定頭的拷貝作為對克隆列表的引用。確定隨機節(jié)點的關(guān)系之后再拆分鏈表。其時間復雜度為,空間復雜度為。 給定一個鏈表,每個節(jié)點包含一個額外增加的隨機指針,該指針可以指向鏈表中的任何節(jié)點或空節(jié)點。 要求返回這個鏈表的深拷貝。 A linked list is g...

    entner 評論0 收藏0
  • LeetCode 138:復制帶隨機指針的鏈表 Copy List with Random Poin

    摘要:給定一個鏈表,每個節(jié)點包含一個額外增加的隨機指針,該指針可以指向鏈表中的任何節(jié)點或空節(jié)點。要求返回這個鏈表的深拷貝。提示你必須返回給定頭的拷貝作為對克隆列表的引用。確定隨機節(jié)點的關(guān)系之后再拆分鏈表。其時間復雜度為,空間復雜度為。 給定一個鏈表,每個節(jié)點包含一個額外增加的隨機指針,該指針可以指向鏈表中的任何節(jié)點或空節(jié)點。 要求返回這個鏈表的深拷貝。 A linked list is g...

    Lucky_Boy 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<