多语言展示
当前在线:898今日阅读:183今日分享:19

如何通过一次遍历删除链表倒数第N个元素

题目:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。约束:通过一次遍历完成。初看题目,可能会想到遍历链表,通过一个 Map 记录所有节点的位置,然后获取待删除位置的前一个节点,做删除处理即可,但该算法时间复杂度为 O(n), 不是很理想,本篇经验将分享一个快慢指针算法,在O(1)的空间复杂度下返回结果。
工具/原料
1

Eclipse

2

JDK1.8

方法/步骤
1

声明链表节点类图示,通过内部静态类的形式,声明链表节点类,用于构建链表结构

2

编写代码,通过两个间隔为N的节点指针,找到倒数第N+1个元素图示,声明两个节点指针,快指针先向前移动 N 步,然后快慢节点指针一起向前移动,直到快指针遍历完毕,此时慢节点指针会指向倒数第 N+1 个节点元素。注意,如果快指针向前移动 N 步已经为空,则说明我们要删除第1个元素。

3

编写代码,输出一个链表图示,以给定节点为起始节点,开始向后遍历,输出整个链表

4

编写测试代码图示,主方法中,构建一个链表,调用上述方法删除倒数第2个元素,并将结果输出到控制台。

5

运行测试代码图示,运行主方法,观察控制台输出,符合预期

6

平台提交算法图示,提交算法,测试通过

注意事项

该题目有约束条件:只可遍历一次链表

推荐信息