LeetCode 19. 删除链表的倒数第N个节点
原题链接
中等
作者:
wa着wa着就ac了
,
2020-03-20 19:27:22
,
所有人可见
,
阅读 461
算法1
(双指针) $O(n)$
- 可能需要删除头节点,所以虚拟一个头结点
- 先让后面的指针移动n次
- 然后再两个指针一起移动,当后指针的下一个是null时,就删除第一个的指针的下一个结点
- 返回虚拟节点的next
C++ 代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *removeNthFromEnd(ListNode *head, int n) {
ListNode *dummy = new ListNode(-1);
dummy->next = head;
ListNode *first = dummy, *second = dummy;
while (n--) second = second->next;
while (second->next) {
first = first->next;
second = second->next;
}
first->next = first->next->next;
return dummy->next;
}
};