19. Remove Nth Node From End of List


Given a linked list, remove the n-th node from the end of list and return its head.


Given linked list: 1->2->3->4->5, and n = 2.

After removing the second node from the end, the linked list becomes 1->2->3->5.

Thought Process & White Board


class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def removeFromEnd(self, head, n):
        dummyHead = ListNode(None)
        dummyHead.next = head

        p, q = dummyHead, dummyHead

        for i in range(n+1):
            q = q.next

        # now p, q distance is n-1
        while q:
            p = p.next
            q = q.next

        delNode = p.next

        p.next = delNode.next

        return delNode