Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
删除链表的倒数第 N 个结点
题目
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
示例 1:
**输入:**head = [1,2,3,4,5], n = 2 输出: [1,2,3,5]
示例 2:
**输入:**head = [1], n = 1 输出: []
示例 3:
**输入:**head = [1,2], n = 1 输出: [1]
提示:
- 链表中结点的数目为
sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
**进阶:**你能尝试使用一趟扫描实现吗?
Related Topics
- 链表
- 双指针
题目分析
这道题同样也是考察快慢指针,
代码实现
这是代码的实现:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode end = new ListNode(0,head);
ListNode first = head;
ListNode second = end;
for (int i=0;i<n;++i) {
first = first.next;
}
while (first != null) {
first = first.next;
second = second.next;
}
second.next = second.next.next;
ListNode ans = end.next;
return ans;
}
}
这是我用java实现的功能,每个题都用不同的解法和写法,我大体整理了一下自己的思路然后就写了,也没有再想其他的方法,如果你有更好的解法,欢迎和我留言,我们一起进步,一起学习数据结构,共同进步,通过这道题能更熟悉快慢指针的使用和操作。
这道题目和上道题目差不多,同样是考察快慢指针,我们根据n先让快指针多走n步,然后再一块走,当快指针走到尾部的时候,慢指针就正好处在第n个节点的位置,这样跳过这个这个节点,就把第n个节点删除了。
小知识
关于
springBean的生命周期众说纷纭,那么给出我的版本:
先是解析类得到BeanDefinition,如果有多个构造方法就要进行推断构造方法,确定好构造方法后进行实例化得到一个对象,然后对对象中有@Autowired注解的类进行属性填充,然后回调Aware方法,然后是调用BeanPostProcessor的初始化前的方法,然后调用初始化方法,在进行调用BeanPostProcessor的初始化后的方法,进行AOP,bean如果是单例的就放入单例池中,使用Bean,最后Spring关闭容器的时候调用DisposableBean的destory()进行摧毁
总结
本篇文章主要解决了一个删除链表的倒数第 N 个结点的问题,然后简单说了一下spring的生命周期这个面试高频题目,这道题除了使用快慢指针,也可以先计算出链表的长度再遍历,还可以使用栈,希望感兴趣的小伙伴们自己实现一下吧,嘿嘿,多动脑,勤思考。