LeetCode 19.删除链表的倒数第N个节点
**题目描述:**给你一个链表,删除链表的倒数第 n_ _个节点,并且返回链表的头节点
- 删除倒数第n个节点,需要定位到倒数第n个节点的前一个(倒数第n+1)
- 思路:
- 双指针:快指针先走n步,后快慢指针一起移动
- 快指针到尾节点(倒数第1),慢指针恰好到达待删节点前一个(倒数第n+1)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummyHead = new ListNode(0,head);
ListNode* fast = dummyHead;
ListNode* slow = dummyHead;
//先走n步
while(n-- && fast) {
fast = fast->next;
}
//fast走到最后一个节点处停止
while(fast && fast->next){
slow = slow->next;
fast = fast->next;
}
//要删的节点是slow->next
ListNode* temp = slow->next;
slow->next = slow->next->next;
delete temp;
head = dummyHead->next;
delete dummyHead;
return head;
}
};