我们要删除倒数第k个节点,说明我们要找出倒数第k+1的点使指针指向倒数第k个点的下一个点
假设链表中有n个节点,而倒数第k+1个点的位置为(n+1)-(k+1);为n-k,到n-k需要n-k-1部操作
1.我们首先创建一个虚拟头节点,使头节点的下一个节点为首节点
(当我们对原链表进行操作时,就要使虚拟头节点指向当前链表的首节点)
2.接着遍历链表求出链表的长度, 因为链表的长度知道这样才能找到n-k节点的位置
for(auto p=dummy,p,p=p->next)求链表的长度
3.接着我们跳到n-k的位置,使他的指针指向下下个点
也就是p->next=p->next->next
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int k) {
auto dummy=new ListNode(-1);
dummy->next=head;
int n=0;
for(auto p=dummy;p;p=p->next)n++;
auto p=dummy;
for(int i=0;i<n-k-1;i++)p=p->next;
p->next=p->next->next;
return dummy->next;
}
};