给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
时间: 2023-04-27 20:02:28 浏览: 117
题目描述:
给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
思路:
使用双指针,先让第一个指针移动 n 个节点,然后同时移动两个指针,直到第一个指针到达链表末尾,此时第二个指针指向的节点就是要删除的节点。
代码实现:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummy = new ListNode(); // 创建虚拟头节点
dummy->next = head;
ListNode* first = dummy;
ListNode* second = dummy;
for (int i = ; i < n; i++) {
first = first->next;
}
while (first->next != nullptr) {
first = first->next;
second = second->next;
}
ListNode* temp = second->next;
second->next = second->next->next;
delete temp;
return dummy->next;
}
};
阅读全文