lotus

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

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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指针指向它的下下个节点,即跳过要删除的节点。这样就完成了删除操作。
  • 最后,我们返回虚拟头结点的下一个节点,即原始链表的第一个节点,作为结果。
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 2023-04-18 16:33  白露~  阅读(6)  评论(0编辑  收藏  举报