[LeetCode] 138. Copy List with Random Pointer, Medium

2025. 4. 1. 14:45·CodingTest/LeetCode
반응형

1. 문제

  • next와 random 필드를 가지는 노드로 구성된 단일 연결 리스트를 깊은 복사를 통해 새로운 노드로 구성된 리스트를 반환하라.
  • 새로운 리스트는 기존 노드를 참조해서는 안되고, 기존 리스트 역시 변경되면 안된다.
/**
 * Definition for _Node.
 * class _Node {
 *     val: number
 *     next: _Node | null
 *     random: _Node | null
 * 
 *     constructor(val?: number, next?: _Node, random?: _Node) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *         this.random = (random===undefined ? null : random)
 *     }
 * }
 */


function copyRandomList(head: _Node | null): _Node | null {
    let p1 = head;

    // 1. 기존 노드 복사본 뒤에 붙이기.
    while(p1) {
        const newNode = new _Node(p1.val);
        newNode.next = p1.next;
        p1.next = newNode;
        p1 = newNode.next;
    }
    
    // 2. 기존 노드 random 값을 이용해 새로운 노드 random 갱신.
    p1 = head;
    while(p1) {
        if(p1.random) {
            p1.next.random = p1.random.next;
        }
        p1 = p1.next.next;
    }

    const dummy = new _Node(0);
    let dummyP = dummy;

    // 3. 기존 리스트와 분리.
    p1 = head;
    while(p1) {
        dummyP.next = p1.next;
        dummyP = dummyP.next;
        p1.next = p1.next.next;
        p1 = p1.next;
    }

    return dummy.next;
};
  • 못풀어서 다른 사람 풀이를 참고했다. 기존 노드의 바로 뒤에 새로운 노드를 붙이고, random을 갱신해 분리하는 식으로 풀이한다.
  • 별도 리스트로 구성해가면서 풀어보려고 했는데, random 필드 때문에 막혔다.
저작자표시 (새창열림)
'CodingTest/LeetCode' 카테고리의 다른 글
  • [LeetCode] 622. Design Circular Queue, Medium
  • [LeetCode] 61. Rotate List, Medium
  • [LeetCode] 430. Flatten a Multilevel Doubly Linked List, Medium
  • [LeetCode] 2. Add Two Numbers, Medium
뜸부깅
뜸부깅
코딩에 대한 여러 개인적인 생각을 정리하고 공부를 하는 공간입니다!!
  • 뜸부깅
    코오오딩
    뜸부깅
  • 전체
    오늘
    어제
    • Note (429)
      • Skill (31)
        • Java & Spring (9)
        • Javascript & HTML & CSS (0)
        • React (0)
        • Next.js (22)
      • CodingTest (389)
        • 백준 온라인 저지(BOJ) (140)
        • 프로그래머스(Programmers) (79)
        • LeetCode (170)
      • Algorithm & Data Structure (6)
      • [Project] 포트폴리오 (3)
        • Front end (3)
        • Back end (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    meidum
    백준7576
    백준2751
    백준1260
    BOJ
    medium
    백준
    boj1427
    자바
    Easy
    프로그래머스
    boj2108
    component-scan
    Java
    알고리즘
    백준7576자바
    백준1427
    TypeScript
    leetcode 2236
    next 14
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뜸부깅
[LeetCode] 138. Copy List with Random Pointer, Medium
상단으로

티스토리툴바