LeetCode刷题之路:19. 删除链表的倒数第 N 个结点

如果帮助到您,还请点个关注吧,hahaha

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

进阶:你能尝试使用一趟扫描实现吗?

示例 1:
在这里插入图片描述

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:

输入:head = [1], n = 1
输出:[]
示例 3:

输入:head = [1,2], n = 1
输出:[1]

提示:

链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz

#最直观的思路
利用双指针法,直接在原链表上进行修改,既省时又省空间

首先添加虚假头指针
随后利用双指针,先让cur指针前进n个节点,
这样其和end节点之间变相差n个节点
然后让cur和end节点同时移动,直至cur节点为None,代表已经到了链表的末尾
同时,用pre来记录end节点的前节点,为了方便删除end节点
最后,直接将pre的下一节点指向end的下一节点即可
这样便达到了删除end节点的效果


class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        dummy = ListNode(-1, head)
        cur = dummy
        end = dummy
        for _ in range(n):
            cur = cur.next
        while cur != None:
            cur = cur.next
            pre = end
            end = end.next
        pre.next = end.next
        return dummy.next

            
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值