019.删除链表的倒数第 N 个节点——通过手绘图和 LinkedList 源码的讲解,你一定看得懂
题意
给你一个链表,删除链表的倒数第 n 个节点,并且返回链表的头节点。
难度
中等
示例
示例 1:
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
输入:head = [1,2], n = 1
输出:[1]
进阶:你能尝试使用一趟扫描实现吗?
分析
看到这道题,其实很容易想到 LinkedList 的 remove 方法,对吧?知道 remove 方法是如何实现的,就能写出这道题的题解。
我也曾在《二哥的 Java 进阶之路》上讲过 remove 方法的源码,其实现方式也非常简单,先遍历找到对应的节点,通过 node 方法实现,内核用的是 for 循环。
找到节点后,将节点的前一个节点的 next 指向节点的下一个节点;将节点的下一个节点的 prev 指向节点的前一个节点,这样就将节点从链表中删除了。
也就是前面提到的 unlink 方法。
LinkedList 其实比 LeetCode 这道链表的题复杂,因为 LinkedList 是双向链表,而 LeetCode 这道题是单向链表,下面是 LeetCode 为我们定义的链表 ListNode。
真诚点赞 诚不我欺
回复