https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/
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:
Given n will always be valid.
Try to do this in one pass.
//time: o(n) space: o(1)
1 //先走N 步,然后用TWO POINTERS 的思想做出来
2 /*
3 * 1->2->3->4->5->null
4 * d
5 * s (s)
6 * f (f)
7 * */
8 public ListNode removeNthFromEnd(ListNode head, int n) {
9 ListNode dummy = new ListNode(0);
10 ListNode slow = dummy;
11 ListNode fast = dummy;
12 dummy.next = head ;
13 //当N = 2 :0->1 1->2 2->3 FAST 走了三步
14 for (int i = 0; i <=n ; i++) {
15 fast = fast.next ;
16 }
17 //0->1 1->2 2->3 SLOW 走了三步 3->4 4->5 5-> null FAST 走了3步
18 while (fast != null){
19 slow = slow.next ;
20 fast = fast.next ;
21 }
22 //直接跳过去
23 slow.next = slow.next.next ;
24 return dummy.next ;
25 }