设空结点指向head便于插入和删除结点
考虑特殊情况 head结点被删除
a结点仅用来测试长度,找到目标结点的位置
b结点为空结点指向head返回值
cur用来删除目标值(特殊情况 目标值为head 这时cur=b)
则开始就将cur初始化为b开始遍历
/*** 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) {if(head->next==nullptr){return nullptr;}ListNode* a=head;ListNode* b= new ListNode();ListNode* cur=b;b->next=head;int len=0;while(a!=nullptr){a=a->next;len++;}for(int i=1;i<=len-n;i++)//使cor置于目标结点的前面,目标结点可能是head {cur=cur->next;}cur->next=cur->next->next;return b->next; //目标值不是head 本身b->head 目标值是head的时候cor=b 也是b->head->next}
};