题目:
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1 输出:[]
示例 3:
输入:head = [1,2], n = 1 输出:[1]
提示:
- 链表中结点的数目为
sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
解答:
首先,这种问题可以使用双指针(快慢指针)来解决,先让快指针移动N+1步骤(N指第N个节点),慢指针不动,最后快慢指针一起移动,移动到快指针指向链表最后的NULL停止。
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* xu = new ListNode(0,head);ListNode* slow=xu;ListNode* fast=head;//删除第n个节点,需要快指针移动n+1步,所以多的+1这一步就让他指向头节点就可以了while(n--){//快指针走n步fast=fast->next;}while(fast!=NULL){//快慢指针一起走,走到快指针指向空fast=fast->next;slow=slow->next;}slow->next=slow->next->next;//此时慢指针指向想要删除节点的前一个位置,可以进行删除了return xu->next;}
};