题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
C语言, 快慢指针找到倒数n+1节点,然后设置next指针指向next->next,跳过n节点
struct ListNode* removeNthFromEnd(struct ListNode* head, int n ) {
// write code here
struct ListNode *pfast, *pslow;
struct ListNode *dummyHead = (struct ListNode *)malloc(sizeof(struct ListNode));
dummyHead->next = head;
pfast = dummyHead, pslow = dummyHead; //创建虚拟头节点,并且fast slow都指向dummy
for(int i=0; i<=n; i++){ //找到fast位置,注意此时slow和fast距离n+1
if(!pfast)return NULL;
pfast = pfast->next;
}
while(pfast){ //当fast没到末尾时,fast slow一起移动
pfast = pfast->next;
pslow = pslow->next;
}
//fast找到末尾时,slow在要删除的节点的前一个(前面的n+1),将slow的next指向next->next,跳过倒数n节点。
pslow->next = pslow->next->next;
return dummyHead->next;
}