lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1846 随笔 :: 0 文章 :: 109 评论 :: 288万 阅读

1. 题目

 https://leetcode.cn/problems/remove-nth-node-from-end-of-list/

 

2. 解法

  • 这道题的目标是删除链表中倒数第n个节点,例如,给定链表1->2->3->4->5和n=2,要求删除倒数第二个节点,即4,返回1->2->3->5。

这道题的解题思路:

  • 我们可以使用两个指针来遍历链表,一个快指针和一个慢指针。快指针先走n步,然后快指针和慢指针同时向后移动,直到快指针到达链表尾部。此时,慢指针的下一个节点就是要删除的节点。
  • 为了方便处理边界情况,我们可以使用一个虚拟头结点来连接原始链表。虚拟头结点的作用是在链表前面添加一个空节点,这样我们就不用担心删除的节点是第一个节点的情况。
  • 我们可以通过修改慢指针的next指针来删除该节点。具体来说,我们让慢指针的next指针指向它的下下个节点,即跳过要删除的节点。这样就完成了删除操作。
  • 最后,我们返回虚拟头结点的下一个节点,即原始链表的第一个节点,作为结果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if (head == null) return null;
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode fast = dummy;
        ListNode slow = dummy;
 
        for (int i = 0; i < n; i++) {
            fast = fast.next;
        }
 
        while (fast.next != null) {
            fast = fast.next;
            slow = slow.next;
        }
 
        slow.next = slow.next.next;
        return dummy.next;
    }
}

  

3. 总结

posted on   白露~  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示