题目描述 
给定一个链表,删除链表的倒数第 n  个结点,并且返回链表的头结点。
 
示例 1: 
输入: head = [1,2,3,4,5], n = 2
输出: [1,2,3,5]
 
示例 2: 
输入: head = [1], n = 1
输出: []
 
示例 3: 
输入: head = [1,2], n = 1
输出: [1]
 
 
提示: 
    链表中结点的数目为 sz 
    1 <= sz <= 30 
    0 <= Node.val <= 100 
    1 <= n <= sz 
 
 
进阶: 能尝试使用一趟扫描实现吗?
 
 注意:本题与主站 19 题相同: https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 
解法 
方法一 
Python3 Java C++ Go JavaScript Ruby Swift 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 # Definition for singly-linked list. 
# class ListNode: 
#     def __init__(self, val=0, next=None): 
#         self.val = val 
#         self.next = next 
class   Solution : 
    def   removeNthFromEnd ( self ,  head :  ListNode ,  n :  int )  ->  ListNode : 
        dummy  =  ListNode ( next = head ) 
        slow ,  fast  =  dummy ,  dummy 
        for  _  in  range ( n ): 
            fast  =  fast . next 
        while  fast . next : 
            slow  =  slow . next 
            fast  =  fast . next 
        slow . next  =  slow . next . next 
        return  dummy . next 
 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 /** 
 * Definition for singly-linked list. 
 * public class ListNode { 
 *     int val; 
 *     ListNode next; 
 *     ListNode() {} 
 *     ListNode(int val) { this.val = val; } 
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; } 
 * } 
 */ 
class  Solution   { 
     public   ListNode   removeNthFromEnd ( ListNode   head ,   int   n )   { 
         ListNode   dummy   =   new   ListNode ( 0 ,   head ); 
         ListNode   fast   =   dummy ,   slow   =   dummy ; 
         while   ( n --   >   0 )   { 
             fast   =   fast . next ; 
         } 
         while   ( fast . next   !=   null )   { 
             slow   =   slow . next ; 
             fast   =   fast . next ; 
         } 
         slow . next   =   slow . next . next ; 
         return   dummy . next ; 
     } 
} 
 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 /** 
 * Definition for singly-linked list. 
 * struct ListNode { 
 *     int val; 
 *     ListNode *next; 
 *     ListNode() : val(0), next(nullptr) {} 
 *     ListNode(int x) : val(x), next(nullptr) {} 
 *     ListNode(int x, ListNode *next) : val(x), next(next) {} 
 * }; 
 */ 
class   Solution   { 
public : 
     ListNode *   removeNthFromEnd ( ListNode *   head ,   int   n )   { 
         ListNode *   dummy   =   new   ListNode ( 0 ,   head ); 
         ListNode *   fast   =   dummy ; 
         ListNode *   slow   =   dummy ; 
         while   ( n -- )   { 
             fast   =   fast -> next ; 
         } 
         while   ( fast -> next )   { 
             slow   =   slow -> next ; 
             fast   =   fast -> next ; 
         } 
         slow -> next   =   slow -> next -> next ; 
         return   dummy -> next ; 
     } 
}; 
 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 /** 
 * Definition for singly-linked list. 
 * type ListNode struct { 
 *     Val int 
 *     Next *ListNode 
 * } 
 */ 
func   removeNthFromEnd ( head   * ListNode ,   n   int )   * ListNode   { 
     dummy   :=   & ListNode { 0 ,   head } 
     fast   :=   dummy 
     slow   :=   dummy 
     for   n   >   0   { 
         fast   =   fast . Next 
         n   -=   1 
     } 
     for   fast . Next   !=   nil   { 
         slow   =   slow . Next 
         fast   =   fast . Next 
     } 
     slow . Next   =   slow . Next . Next 
     return   dummy . Next 
} 
 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 /** 
 * Definition for singly-linked list. 
 * function ListNode(val, next) { 
 *     this.val = (val===undefined ? 0 : val) 
 *     this.next = (next===undefined ? null : next) 
 * } 
 */ 
/** 
 * @param {ListNode} head 
 * @param {number} n 
 * @return {ListNode} 
 */ 
var   removeNthFromEnd   =   function   ( head ,   n )   { 
     const   dummy   =   new   ListNode ( 0 ,   head ); 
     let   fast   =   dummy , 
         slow   =   dummy ; 
     while   ( n -- )   { 
         fast   =   fast . next ; 
     } 
     while   ( fast . next )   { 
         slow   =   slow . next ; 
         fast   =   fast . next ; 
     } 
     slow . next   =   slow . next . next ; 
     return   dummy . next ; 
}; 
 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 # Definition for singly-linked list. 
# class ListNode 
#     attr_accessor :val, :next 
#     def initialize(val = 0, _next = nil) 
#         @val = val 
#         @next = _next 
#     end 
# end 
# @param {ListNode} head 
# @param {Integer} n 
# @return {ListNode} 
def   remove_nth_from_end ( head ,   n ) 
     dummy   =   ListNode . new ( 0 ,   head ) 
     fast   =   slow   =   dummy 
     while   n   >   0 
         fast   =   fast . next 
         n   -=   1 
     end 
     while   fast . next 
         slow   =   slow . next 
         fast   =   fast . next 
     end 
     slow . next   =   slow . next . next 
     return   dummy . next 
end 
 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 /* class ListNode { 
*     var val: Int 
*     var next: ListNode? 
*     init() { self.val = 0; self.next = nil } 
*     init(_ val: Int) { self.val = val; self.next = nil } 
*     init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next } 
* } 
*/ 
class   Solution   { 
     func   removeNthFromEnd ( _   head :   ListNode ?,   _   n :   Int )   ->   ListNode ?   { 
         let   dummy   =   ListNode ( 0 ,   head ) 
         var   fast :   ListNode ?   =   dummy 
         var   slow :   ListNode ?   =   dummy 
         var   n   =   n 
         while   n   >   0   { 
             fast   =   fast ?. next 
             n   -=   1 
         } 
         while   fast ?. next   !=   nil   { 
             slow   =   slow ?. next 
             fast   =   fast ?. next 
         } 
         slow ?. next   =   slow ?. next ?. next 
         return   dummy . next 
     } 
}