题目描述
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。(给定的 n 保证是有效的)
进阶要求,只能进行一次遍历
示例
1 | 给定一个链表: 1->2->3->4->5, 和 n = 2. |
解析
如果允许超过一次遍历则只需要先遍历一遍获得链表的长度L,然后就可以将问题转化为移除正数第(L+1-n)个节点。但只允许一次遍历的话就需要使用两个指针,指针1指向头节点,指针2指向头结点后n个节点,两个指针以相同速度遍历,当指针2完成遍历时,指针1指向的就是倒数第n个节点。
代码实现
1 | public class RemoveNthNode { |
该实现方案时间复杂度取决于链表长度L,只有一次遍历所以为O(L),空间复杂度为O(1)。