【LeetCode Hot 100】19. 删除链表的倒数第N个结点

题目描述

由于单向链表只能从头往后遍历,所以无法向数组那样的随机存取结构一样进行下标运算,也无法从链表尾向前数n个结点。本题有两个思路,个人觉得都比较简单。

  1. 可以先遍历一遍链表得到链表的长度len,然后再从头往后数len - n个结点就是所求结点。
  2. 可以使用快慢指针,快指针先移动n个结点,然后两个指针一起移动,直到快指针到达链表尾,此时慢指针指向的就是所求结点。

注意这种链表题可以考虑在链表头借助一个dummy结点,通过将该结点视作结点0,可以让第一个结点的行为与后续结点保持一致。

// Java
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummyHead = new ListNode(-1, head);
ListNode slow = dummyHead, fast = dummyHead;
while (n-- > 0) {
fast = fast.next;
}
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return dummyHead.next;
}
}
posted @   随机生成一个id  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示