题目描述[原题链接][https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/]
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
算法描述
首先预防链表会删完,添加一个虚拟节点d
,令d->next=head
即可;要删除倒数第n
个节点,因为这个链表是单链表,只能单向遍历,要实现O(n)的复杂度,得有两个节点,使他们间距为n
一起向前移动,当后面节点到了尾部,前面节点就在倒数第n
个节点上,然后使当前节点的next
指向后面节点的next
即可;
时间复杂度:一次遍历O(n)
C++代码
1 | class Solution { |
Java代码
1 | class Solution { |