“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”
一、题目描述
- 给你一个链表,删除链表的倒数第
n个结点,并且返回链表的头结点。
二、思路分析
- 利用快慢指针进行解题
- 当快指针的下一个节点是Null的情况
- 此时慢指针的下一个节点就是我们要删除的节点
- 将慢指针的next指向慢指针的next.next节点即可
三、AC 代码:
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
//创建一个头节点
ListNode pre = new ListNode(0);
//头节点的下一个指向head
pre.next = head;
//定义快慢两个指针
ListNode start = pre,end = pre;
//边界条件,如果n不是零,才走
while(n!=0){
//快指针先走一步
start = start.next;
//快指针走n步
n--;
}
//边界条件,当快指针的下一个节点,为null的时候,慢指针的下一个节点就是要删除的节点
while(start.next!=null){
//如果不为空快指针向前走,同时慢指针也向前走
start = start.next;
end = end.next;
}
//此时,将慢指针的下一个节点指向下下个节点
end.next = end.next.next;
//返回头节点的下一个节点
return pre.next;
}
}
四、总结:
- 好了,代码撸完,我们
总结一下:-
注意
边界条件 -
快指针先走
n步 -
此时两指针之间就差了
n,当我们的快指针下一个节点是null的时候,慢指针指向下下个节点,就成功删除了第n个元素
-