1. 题目描述
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
进阶:你能尝试使用一趟扫描实现吗?
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
2. 解法
思路:快慢指针,快指针先走n步,然后快慢一起走,直到快指针走到最后,要注意的是可能是要删除第一个节点,这个时候可以直接返回head -> next
talk is cheap,show me the code!
代码如下:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(!head || !head -> next) return nullptr;
ListNode* slow = head;
ListNode* fast = head;
while(n){
fast = fast -> next;
n--;
}
if(!fast) return head -> next;
while(fast -> next){
slow = slow -> next;
fast = fast -> next;
}
slow -> next = slow -> next -> next;
return head;
}