倒数第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; }
};