19. 删除链表的倒数第N个节点
与这个题类似 面试题 02.02. 返回倒数第 k 个节点
但是本题要删除节点需要考虑的更多,比如要删head头节点处理的问题。
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
//设置哑节点(不然删除head节点,找不到头了)
ListNode *dummy = new ListNode(0);
if(!head) return head;
dummy->next = head;
ListNode *fast = dummy, *low = dummy;
//快指针先向前移动n个位置
for(int i = 0; i < n; i++){
fast = fast->next;
}
//双指针移动,移动完后,low指针指向待删除节点的前一个节点
while(fast->next != NULL){
fast = fast->next;
low = low->next;
}
//删除p->next的节点
low->next = low->next->next;
return dummy->next;
}
};