【LeetCode Hot 100】19. 删除链表的倒数第N个结点
由于单向链表只能从头往后遍历,所以无法向数组那样的随机存取结构一样进行下标运算,也无法从链表尾向前数n个结点。本题有两个思路,个人觉得都比较简单。
- 可以先遍历一遍链表得到链表的长度
len
,然后再从头往后数len - n
个结点就是所求结点。 - 可以使用快慢指针,快指针先移动
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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本