解题思路:利用双指针,指针node2先走N个值,然后循环当node2->next!=nullptr时,node1循环向后移动,当node2位于链表最后一位时,node1就是要删除节点的前一个,直接让node1->next=node1->next->next,即可
需要注意的地方:当node2移动N个值后已经是空指针时,则n==1,则说明链表只有一个元素,n!=1,则说明删除的是第一个元素,这两种情况要分开讨论
代码:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* node1=head,*node2=head;
for(int i=0;inext;
}
if(node2==nullptr){
if(n==1){
return node1=nullptr;
}
else{
return node1=node1->next;
}
}
while(node2->next!=NULL){
node2=node2->next;
node1=node1->next;
}
node1->next=node1->next->next;
return head;
}
};



