删除链表的倒数第N个节点。给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
1 |
|
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
1 |
|
思路一
先遍历一遍得到链表总长度,然后正向定位到需要删除的结点的前一个结点,进行删除。时间复杂度 $O(n)$。需要注意的是,删除头结点时的判断。
1 |
|
思路二
使用两个指针,一个指针在另一个指针前方 $n$ 个位置的地方,然后两个指针同时前进,到链表尾部时,较慢的指针所指的结点即为需要移除的结点。时间复杂度 $O(n)$。
1 |
|