Bird
Raised Fist0
DSA Pythonprogramming~20 mins

Remove Nth Node from End of List in DSA Python - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Remove Nth Node Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output after removing 2nd node from end
What is the output linked list after removing the 2nd node from the end in the given list?
DSA Python
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def removeNthFromEnd(head, n):
    dummy = ListNode(0, head)
    first = dummy
    second = dummy
    for _ in range(n + 1):
        first = first.next
    while first:
        first = first.next
        second = second.next
    second.next = second.next.next
    return dummy.next

# Create linked list 1 -> 2 -> 3 -> 4 -> 5 -> null
head = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5)))))

new_head = removeNthFromEnd(head, 2)

# Print list
result = []
while new_head:
    result.append(new_head.val)
    new_head = new_head.next
print(result)
A[1, 2, 4, 5]
B[1, 3, 4, 5]
C[1, 2, 3, 5]
D[2, 3, 4, 5]
Attempts:
2 left
💡 Hint
Remember the 2nd node from the end is the 4th node from the start in a 5-node list.
❓ Predict Output
intermediate
2:00remaining
Output after removing last node
What is the output linked list after removing the 1st node from the end (last node) in the given list?
DSA Python
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def removeNthFromEnd(head, n):
    dummy = ListNode(0, head)
    first = dummy
    second = dummy
    for _ in range(n + 1):
        first = first.next
    while first:
        first = first.next
        second = second.next
    second.next = second.next.next
    return dummy.next

# Create linked list 10 -> 20 -> 30 -> null
head = ListNode(10, ListNode(20, ListNode(30)))

new_head = removeNthFromEnd(head, 1)

# Print list
result = []
while new_head:
    result.append(new_head.val)
    new_head = new_head.next
print(result)
A[10, 20, 30]
B[10, 30]
C[20, 30]
D[10, 20]
Attempts:
2 left
💡 Hint
Removing the last node means removing the node with value 30.
🔧 Debug
advanced
2:00remaining
Identify the error in removing nth node from end
What error will this code raise when trying to remove the 3rd node from the end of a 2-node list?
DSA Python
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def removeNthFromEnd(head, n):
    dummy = ListNode(0, head)
    first = dummy
    second = dummy
    for _ in range(n):
        first = first.next
    while first.next:
        first = first.next
        second = second.next
    second.next = second.next.next
    return dummy.next

# Create linked list 1 -> 2 -> null
head = ListNode(1, ListNode(2))

new_head = removeNthFromEnd(head, 3)
AAttributeError
BNoneType AttributeError
CIndexError
DNo error, returns [2]
Attempts:
2 left
💡 Hint
Check the for loop that moves the first pointer n times.
🧠 Conceptual
advanced
1:00remaining
Why use a dummy node in removing nth node from end?
What is the main reason to use a dummy node before the head when removing the nth node from the end of a linked list?
ATo simplify edge cases like removing the head node
BTo reduce memory usage
CTo speed up the traversal
DTo avoid using recursion
Attempts:
2 left
💡 Hint
Think about what happens if the node to remove is the first node.
❓ Predict Output
expert
3:00remaining
Output after removing 4th node from end in a 5-node list
What is the output linked list after removing the 4th node from the end in the list 5 -> 4 -> 3 -> 2 -> 1 -> null?
DSA Python
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def removeNthFromEnd(head, n):
    dummy = ListNode(0, head)
    first = dummy
    second = dummy
    for _ in range(n + 1):
        first = first.next
    while first:
        first = first.next
        second = second.next
    second.next = second.next.next
    return dummy.next

# Create linked list 5 -> 4 -> 3 -> 2 -> 1 -> null
head = ListNode(5, ListNode(4, ListNode(3, ListNode(2, ListNode(1)))))

new_head = removeNthFromEnd(head, 4)

# Print list
result = []
while new_head:
    result.append(new_head.val)
    new_head = new_head.next
print(result)
A[5, 3, 2, 1]
B[4, 3, 2, 1]
C[5, 4, 2, 1]
D[5, 4, 3, 1]
Attempts:
2 left
💡 Hint
The 4th node from the end is the 2nd node from the start.

Practice

(1/5)
1. What does the problem Remove Nth Node from End of List ask you to do?
easy
A. Add a new node at the Nth position from the start
B. Find the value of the Nth node from the start
C. Reverse the linked list up to the Nth node
D. Delete the node that is the Nth from the end in a linked list

Solution

  1. Step 1: Understand the problem statement

    The problem requires removing a node counting from the end of the linked list, not from the start.
  2. Step 2: Identify the correct action

    Deleting the Nth node from the end means locating it and removing it from the list.
  3. Final Answer:

    Delete the node that is the Nth from the end in a linked list -> Option D
  4. Quick Check:

    Remove Nth node from end = Delete node Nth from end [OK]
Hint: Focus on 'from end' means counting backwards [OK]
Common Mistakes:
  • Confusing Nth from start with Nth from end
  • Thinking the problem is about reversing the list
  • Trying to add nodes instead of removing
2. Which of the following is the correct Python syntax to create a dummy node pointing to the head of a linked list named head?
easy
A. dummy = head.next
B. dummy = ListNode(head)
C. dummy = ListNode(0); dummy.next = head
D. dummy = ListNode(); dummy = head

Solution

  1. Step 1: Understand dummy node creation

    A dummy node is usually created with a value (often 0) and its next pointer set to the head.
  2. Step 2: Check each option

    dummy = ListNode(0); dummy.next = head correctly creates a dummy node with value 0 and points its next to head.
  3. Final Answer:

    dummy = ListNode(0); dummy.next = head -> Option C
  4. Quick Check:

    Dummy node points to head = dummy.next = head [OK]
Hint: Dummy node value 0 and next points to head [OK]
Common Mistakes:
  • Passing head as value instead of next pointer
  • Overwriting dummy after creation
  • Not linking dummy to head
3. What will be the output linked list after removing the 2nd node from the end in the list 1 -> 2 -> 3 -> 4 -> 5 -> null?
medium
A. 1 -> 2 -> 3 -> 5 -> null
B. 2 -> 3 -> 4 -> 5 -> null
C. 1 -> 3 -> 4 -> 5 -> null
D. 1 -> 2 -> 4 -> 5 -> null

Solution

  1. Step 1: Identify the 2nd node from the end

    Counting from the end: 5 (1st), 4 (2nd). So node with value 4 is to be removed.
  2. Step 2: Remove node 4 and link previous node to next

    Node 3's next pointer should now point to node 5, skipping node 4.
  3. Final Answer:

    1 -> 2 -> 3 -> 5 -> null -> Option A
  4. Quick Check:

    Remove 2nd from end (4) = 1->2->3->5 [OK]
Hint: Count nodes from end, remove that node [OK]
Common Mistakes:
  • Removing the wrong node counting from start
  • Not updating the previous node's next pointer
  • Confusing node values
4. Given this code snippet to remove the Nth node from end, what is the error?
def removeNthFromEnd(head, n):
    dummy = ListNode(0)
    dummy.next = head
    first = dummy
    second = dummy
    for i in range(n):
        first = first.next
    while first.next:
        first = first.next
        second = second.next
    second.next = second.next.next
    return dummy.next
medium
A. The for loop should run n+1 times to move first pointer
B. The while loop condition should be while first is not None
C. second.next = second.next.next causes error if second.next is None
D. dummy node is not needed for this problem

Solution

  1. Step 1: Analyze the for loop moving first pointer

    To position first pointer n nodes ahead, it must move n+1 times to maintain gap with second pointer.
  2. Step 2: Understand the impact of moving first pointer only n times

    If first moves only n times, the gap is off by one, causing wrong node removal.
  3. Final Answer:

    The for loop should run n+1 times to move first pointer -> Option A
  4. Quick Check:

    Move first pointer n+1 times for correct gap [OK]
Hint: Move first pointer n+1 times to keep gap [OK]
Common Mistakes:
  • Moving first pointer only n times
  • Incorrect while loop condition
  • Ignoring dummy node usage
5. You have a linked list 1 -> 2 -> 3 -> 4 -> 5 -> null. If you remove the 5th node from the end, what will be the resulting list?
hard
A. 1 -> 3 -> 4 -> 5 -> null
B. 2 -> 3 -> 4 -> 5 -> null
C. 1 -> 2 -> 3 -> 4 -> null
D. 5 -> null

Solution

  1. Step 1: Identify the 5th node from the end

    The list length is 5, so the 5th node from the end is the first node with value 1.
  2. Step 2: Remove the first node and link dummy to second node

    Removing node 1 means the new head is node 2, so list becomes 2 -> 3 -> 4 -> 5 -> null.
  3. Final Answer:

    2 -> 3 -> 4 -> 5 -> null -> Option B
  4. Quick Check:

    Remove 5th from end (head) = 2->3->4->5 [OK]
Hint: Removing Nth from end where N equals list length removes head [OK]
Common Mistakes:
  • Removing last node instead of first
  • Not updating head pointer after removal
  • Confusing node positions
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