Leetcode19-删除链表的倒数第 N 个结点-算法小记

该文章介绍了解决力扣(LeetCode)上的一道编程题,即如何使用双指针法来删除链表的倒数第N个节点。方法是设置快指针和慢指针,快指针先走N+1步,然后两者同步移动,直到快指针到达链表尾部,此时慢指针指向的就是待删除节点的前一个节点,从而实现删除操作。
摘要由CSDN通过智能技术生成

题目:力扣

思路:

删除链表的倒数第N个节点,我们就需要删除的节点的之前那个节点,这样才可以删除。

我们可以采用双指针法,一个快指针,一个慢指针,因为我们需要知道删除的节点之前那个节点,所以我们让快指针和慢指针之间保持n+1个节点,(n是倒数第n个节点)。

先让快指针走n+1步,然后快指针和慢指针一起走,终止条件是当快指针为空的时候,就终止。

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummyNode = new ListNode(0, head);
        ListNode fastNode = dummyNode;
        ListNode slowNode = dummyNode;

        for (int i = 0; i <= n; i++) {
            fastNode = fastNode.next;
        }

        while (fastNode != null) {
            fastNode = fastNode.next;
            slowNode = slowNode.next;
        }

        slowNode.next = slowNode.next.next;
        return dummyNode.next;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值