LC_19. Remove Nth Node From End of List

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     }

 

posted @ 2018-02-22 03:20  davidnyc  阅读(133)  评论(0编辑  收藏  举报