[leetcode_19]Remove Nth Node From End of List

给一个单向链表,输入一个n,删掉从后往前第n个元素。尽可能一次遍历单链表。
两个指针,使他们的差距刚好为n, 当后面一个刚好指向NULL的时候,删掉前一个即可。
附上代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
    ListNode *removeNthFromEnd(ListNode *head, int n) {
        ListNode *before = NULL;
        ListNode *p1 = head;
        ListNode *p2 = head;
        if(n <= 0) return head;
        for(int i = 0; i < n; i++) {
            p2 = p2->next;
        }
        while(p2 != NULL) {
            p2 = p2->next;
            before = p1;
            p1 = p1->next;
        }
        if(before == NULL) {
            return head->next;
        } else {
            before->next = p1->next;
            return head;
        }
    }
};
Licensed under CC BY-NC-SA 4.0