Bird
Raised Fist0
DSA Javaprogramming~20 mins

Clone Linked List with Random Pointer in DSA Java - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Random Pointer Cloning Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of cloning a linked list with random pointers
What is the printed output of the cloned linked list's values and their random pointers after running the given Java code?
DSA Java
class Node {
    int val;
    Node next;
    Node random;
    Node(int val) { this.val = val; this.next = null; this.random = null; }
}

public class Solution {
    public Node copyRandomList(Node head) {
        if (head == null) return null;
        Node curr = head;
        while (curr != null) {
            Node copy = new Node(curr.val);
            copy.next = curr.next;
            curr.next = copy;
            curr = copy.next;
        }
        curr = head;
        while (curr != null) {
            if (curr.random != null) {
                curr.next.random = curr.random.next;
            }
            curr = curr.next.next;
        }
        curr = head;
        Node pseudoHead = new Node(0);
        Node copyCurr = pseudoHead;
        while (curr != null) {
            copyCurr.next = curr.next;
            curr.next = curr.next.next;
            curr = curr.next;
            copyCurr = copyCurr.next;
        }
        return pseudoHead.next;
    }

    public static void main(String[] args) {
        Node n1 = new Node(1);
        Node n2 = new Node(2);
        Node n3 = new Node(3);
        n1.next = n2; n2.next = n3;
        n1.random = n3; n2.random = n1; n3.random = n2;
        Solution sol = new Solution();
        Node cloned = sol.copyRandomList(n1);
        Node temp = cloned;
        while (temp != null) {
            System.out.print(temp.val + "(" + (temp.random != null ? temp.random.val : "null") + ") -> ");
            temp = temp.next;
        }
        System.out.print("null");
    }
}
A1(null) -> 2(null) -> 3(null) -> null
B1(2) -> 2(3) -> 3(1) -> null
C1(3) -> 2(1) -> 3(2) -> null
D1(1) -> 2(2) -> 3(3) -> null
Attempts:
2 left
💡 Hint
Trace the cloning steps: first interleaving nodes, then assigning random pointers, then separating the lists.
🧠 Conceptual
intermediate
1:30remaining
Understanding the purpose of interleaving nodes in cloning
Why does the cloning algorithm insert copied nodes immediately after their original nodes in the linked list?
ATo easily assign the random pointers of copied nodes using original nodes' random pointers.
BTo sort the linked list nodes by their values.
CTo remove duplicate nodes from the list.
DTo reverse the linked list during cloning.
Attempts:
2 left
💡 Hint
Think about how the random pointer of a copied node can be set without extra space.
🔧 Debug
advanced
1:30remaining
Identify the error in this cloning code snippet
What error will occur when running this code snippet for cloning a linked list with random pointers?
DSA Java
Node curr = head;
while (curr != null) {
    Node copy = new Node(curr.val);
    copy.next = curr.next;
    curr.next = copy;
    curr = curr.next;
}
ANullPointerException when accessing curr.next.
BInfinite loop because curr never advances correctly.
CSyntax error due to missing semicolon.
DNo error; code runs correctly.
Attempts:
2 left
💡 Hint
Check how curr is updated inside the loop.
❓ Predict Output
advanced
2:00remaining
Output after cloning and modifying original list
Given the cloning method, what is the output after modifying the original list's random pointer post-cloning?
DSA Java
Node n1 = new Node(1);
Node n2 = new Node(2);
n1.next = n2;
n1.random = n2;
n2.random = n1;
Solution sol = new Solution();
Node cloned = sol.copyRandomList(n1);
n1.random = null;
Node temp = cloned;
while (temp != null) {
    System.out.print(temp.val + "(" + (temp.random != null ? temp.random.val : "null") + ") -> ");
    temp = temp.next;
}
System.out.print("null");
A1(null) -> 2(null) -> null
B1(null) -> 2(1) -> null
C1(1) -> 2(2) -> null
D1(2) -> 2(1) -> null
Attempts:
2 left
💡 Hint
The cloned list is independent of changes to the original list after cloning.
🚀 Application
expert
2:30remaining
How to optimize cloning a linked list with random pointers for space
Which approach uses O(1) extra space to clone a linked list with random pointers?
AInterleave copied nodes with original nodes, assign random pointers, then separate lists.
BUse a hash map to map original nodes to copied nodes and assign pointers.
CCopy nodes and random pointers by deep recursion.
DCreate a new list and for each node, search original list for random target.
Attempts:
2 left
💡 Hint
Think about how to avoid extra data structures.

Practice

(1/5)
1. What is the main challenge when cloning a linked list with a random pointer?
easy
A. Copying both next and random pointers correctly
B. Only copying the next pointers
C. Ignoring the random pointers
D. Reversing the linked list during cloning

Solution

  1. Step 1: Understand linked list structure

    A linked list with random pointers has two references per node: next and random.
  2. Step 2: Identify cloning challenge

    Cloning requires copying both next and random pointers so the new list matches the original structure.
  3. Final Answer:

    Copying both next and random pointers correctly -> Option A
  4. Quick Check:

    Both pointers must be copied = B [OK]
Hint: Remember to copy both next and random pointers [OK]
Common Mistakes:
  • Copying only next pointers
  • Ignoring random pointers
  • Assuming random pointers are null
2. Which Java code snippet correctly declares a node class for a linked list with a random pointer?
easy
A. class Node { int val; Node next; Node random; Node(int val) { val = val; } }
B. class Node { int val; Node next; Node random; Node() { val = 0; } }
C. class Node { int val; Node next; Node random; void Node(int val) { this.val = val; } }
D. class Node { int val; Node next; Node random; Node(int val) { this.val = val; } }

Solution

  1. Step 1: Check constructor syntax

    Constructor must have the same name as class and assign value with this.val = val.
  2. Step 2: Validate field declarations

    Fields val, next, and random must be declared correctly as int and Node types.
  3. Final Answer:

    class Node { int val; Node next; Node random; Node(int val) { this.val = val; } } -> Option D
  4. Quick Check:

    Constructor with this.val = val is correct = A [OK]
Hint: Constructor name must match class and use this keyword [OK]
Common Mistakes:
  • Using void return type for constructor
  • Not using this keyword for assignment
  • Incorrect constructor name
3. What will be the output of the following code snippet that clones a linked list with random pointers?
class Node {
  int val;
  Node next, random;
  Node(int val) { this.val = val; }
}

// Original list: 1 -> 2 -> null
// random pointers: 1.random = 2, 2.random = 1

Node head = new Node(1);
head.next = new Node(2);
head.random = head.next;
head.next.random = head;

Node clonedHead = cloneList(head);
System.out.println(clonedHead.val + " -> " + clonedHead.next.val + " -> null");
System.out.println(clonedHead.random.val + " -> " + clonedHead.next.random.val + " -> null");

// Assume cloneList correctly clones the list with random pointers
medium
A. 2 -> 1 -> null 1 -> 2 -> null
B. 1 -> 2 -> null 2 -> 1 -> null
C. 1 -> 2 -> null 1 -> 2 -> null
D. 1 -> 1 -> null 2 -> 2 -> null

Solution

  1. Step 1: Understand original list and random pointers

    Original list nodes: 1 -> 2 -> null; random: 1.random = 2, 2.random = 1.
  2. Step 2: Cloned list should replicate values and random links

    Cloned list nodes: 1 -> 2 -> null; cloned random pointers: cloned 1.random = cloned 2, cloned 2.random = cloned 1.
  3. Final Answer:

    1 -> 2 -> null 2 -> 1 -> null -> Option B
  4. Quick Check:

    Random pointers cycle = C [OK]
Hint: Random pointers in clone match original's random targets [OK]
Common Mistakes:
  • Printing original random values instead of cloned
  • Mixing up random pointer values
  • Assuming random pointers are null
4. Identify the bug in this cloning function for a linked list with random pointers:
Node cloneList(Node head) {
  if (head == null) return null;
  Node curr = head;
  while (curr != null) {
    Node copy = new Node(curr.val);
    copy.next = curr.next;
    curr.next = copy;
    curr = curr.next.next;
  }
  // Set random pointers
  curr = head;
  while (curr != null) {
    curr.next.random = curr.random != null ? curr.random.next : null;
    curr = curr.next.next;
  }
  // Separate lists
  curr = head;
  Node copyHead = head.next;
  while (curr != null) {
    Node copy = curr.next;
    curr.next = copy.next;
    copy.next = (copy.next != null) ? copy.next.next : null;
    curr = curr.next;
  }
  return copyHead;
}
medium
A. In the last while loop, copy.next = copy.next.next causes error when copy.next is null
B. In the second while loop, curr.next.random = curr.random.next may cause NullPointerException
C. In the first while loop, curr = curr.next should be curr = curr.next.next
D. The function does not clone the random pointers at all

Solution

  1. Step 1: Analyze last while loop for separating lists

    copy.next = copy.next.next assumes copy.next is not null, but at list end copy.next is null causing error.
  2. Step 2: Identify fix for null check

    Must check if copy.next is null before accessing copy.next.next to avoid NullPointerException.
  3. Final Answer:

    In the last while loop, copy.next = copy.next.next causes error when copy.next is null -> Option A
  4. Quick Check:

    Null check needed before copy.next.next = A [OK]
Hint: Check for null before accessing next of next pointers [OK]
Common Mistakes:
  • Not checking null before copy.next.next
  • Incorrect iteration step in first loop
  • Ignoring random pointer cloning
5. Given a linked list with random pointers, how can you clone it in O(n) time and O(1) extra space? Choose the correct approach.
hard
A. Use a hash map to store original to clone node mapping
B. Copy only next pointers and ignore random pointers
C. Interleave cloned nodes with original nodes, set random pointers, then separate lists
D. Create new nodes and assign random pointers by traversing multiple times

Solution

  1. Step 1: Understand space constraints

    Using a hash map uses O(n) extra space, so not allowed for O(1) space.
  2. Step 2: Use interleaving method

    Interleave cloned nodes between original nodes, assign random pointers using original nodes, then separate lists to get cloned list.
  3. Final Answer:

    Interleave cloned nodes with original nodes, set random pointers, then separate lists -> Option C
  4. Quick Check:

    Interleaving nodes = O(1) space cloning [OK]
Hint: Interleave clones to avoid extra space for mapping [OK]
Common Mistakes:
  • Using hash map increases space complexity
  • Multiple traversals without interleaving
  • Ignoring random pointers
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard