倒数第n个节点可以通过先让快指针先走n步 然后慢指针一起走,当快指针到达链表尾部,此时的慢指针所指位置就是倒数的第n个节点
1.令一起走的步数为d;总长为l
2.L=n+d;
/**

  • struct ListNode {
  • int val;
  • struct ListNode *next;
  • };
  • /

class Solution {
public:
/*
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
ListNode
removeNthFromEnd(ListNode* head, int n) {
// write code here
if(!head) return NULL;
int i=0;
//定义初始节点指针
ListNode H=new ListNode(0);
// 快慢指针
ListNode
f=head;
ListNode*s=head;
H->next=s;

    ListNode*pr=H;
    //先让快指针向前走n步;
    while(i<n&&head)
    {
        f=head->next;
        head=head->next;
        i++;
    }
    // 当快指针达到末尾是此时的慢指针所在的位置就是导倒数第n个节点
    while(f)
    {
        //pr为慢指针的上一个节点指针,对对其进行更新
        pr->next=s;
        pr=pr->next;
        //跟新快慢指针往后走
        s=s->next;
        f=f->next;
    }
    pr->next=s->next;
    return H->next;
}

};