Simple Java solution in one pass
A one pass solution can be done using  pointers. Move one pointer fast -->  n+1 places forward, to maintain a gap of n between the two pointers and then move bo
A one pass solution can be done using  pointers. Move one pointer **fast** -->  **n+1** places forward, to maintain a gap of n between the two pointers and then move both at the same speed. Finally, when the fast pointer reaches the end, the slow pointer will be **n+1** places behind - just the right spot for it to be able to skip the next node.\n\nSince the question gives that **n** is valid, not too many checks have to be put in place. Otherwise, this would be necessary.\n\n    public ListNode removeNthFromEnd(ListNode head, int n) {\n        \n        ListNode start = new ListNode(0);\n        ListNode slow = start, fast = start;\n        slow.next = head;\n        \n        //Move fast in front so that the gap between slow and fast becomes n\n        for(int i=1; i<=n+1; i++)   {\n            fast = fast.next;\n        }\n        //Move fast to the end, maintaining the gap\n        while(fast != null) {\n            slow = slow.next;\n            fast = fast.next;\n        }\n        //Skip the desired node\n        slow.next = slow.next.next;\n        return start.next;\n\t}
['Java']