
/**
* 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) {
int len = getlength(head);
if(len<n) // 如果倒数超出长度,超出范围
return NULL;
ListNode* L = new ListNode(0); // 习惯,一般链表题直接添加一个头节点方便计算。
ListNode* H = L;
L->next = head;
int count = 0;
cout<<"len:"<<len<<endl;
while(L){
if(count==len-n){ // 先计算长度,在算出从前数第几个应该开始
L->next = L->next->next;
break;
}else
L = L->next;
count ++;
}
return H->next;
}
int getlength(ListNode* H){
if(H==NULL)
return 0;
int count = 0;
while(H){
H= H->next;
count++;
}
return count;
}
};