Remove Nth Node from List End

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

For example,
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.

Note:
Try doing it using constant additional space.

Method:

Find the size of the list first, then everything becomes obvious. Note when n == size, then we need to return the second node. Else return the original head.

Solution:

Time: O(n)
Space: O(1)

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     public int val;
 *     public ListNode next;
 *     ListNode(int x) { val = x; next = null; }
 * }
 */
public class Solution {
    public ListNode removeNthFromEnd(ListNode A, int B) {
        if (A == null) return A;
        int size = 0;
        ListNode curr = A;
        while (curr != null) {
            size ++;
            curr = curr.next;
        }
        if (B >= size) return A.next;
        curr = A;
        int num = size - B;
        int n = 1;
        while (n < num) {
            n ++;
            curr = curr.next;
        }
        ListNode next = curr.next;
        if (next != null) {
            curr.next = next.next;
        } else {
            curr.next = null;
        }

        return A;
    }
}