倒数第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);
// 快慢指针
ListNodef=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;
}};

京公网安备 11010502036488号