leetcode 删除链表的倒数第n个数
1.问题描述
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
2.分析
使用两个指针,他们的间隔刚好是n,使得当前一个指针划出链表时,后一个指针刚好指向要移除的元素的前一位。
注:为防止元素刚好一位且被删除导致的空指针问题,应在对链表操作之前添加头指针,操作结束之后去除头指针
3.代码
/**
* 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 *ans = new ListNode(0,head);
ListNode *front = ans->next,*last = ans;
int temp = n;
while(temp--){
front = front->next;
}
while(front != nullptr ){
front = front->next;
last = last->next;
}
ListNode *t = last->next;
last->next = t->next;
head = ans->next;
delete ans;
return head;
}
};