两个栈,第一次将链表的元素全部push进去第一个栈内,
然后从第一栈pop出n个元素,并push进第二个栈内。
要注意假如链表总共有n个元素的话,会出现栈为空的错误,所以要在第一个元素前面添加一个temp;

public static ListNode removeNthFromEnd (ListNode head, int n) {
        // write code here
        Stack<ListNode> stack1 = new Stack<>();
        ListNode temp = new ListNode(-1);
        temp.next = head;
        Stack<ListNode> stack2 = new Stack<>();
        while (head!=null){
            stack1.push(head);
            head = head.next;
        }

        stack1.push(temp);
        for (int i = 0; i < n; i++) {
            stack2.push(stack1.pop());
        }

        stack1.peek().next = stack2.peek().next;
        return temp.next;
    }