Leetcode.19. 删除链表的倒数第 N 个结点

给你一个链表,删除链表的倒数第 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

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

 

分享解题思路,使用【链表】算法

🔸解题思路

1.创建虚拟节点,设下一个指针链表头部
创建两个指针,慢指针和快指针,初始化为虚拟节点

2.让快指针移动到最后一个节点,并且比慢指针快n+1步

3.移动两指针,让两指针到达链表的末尾

4.【删除节点】的上一个节点指向【删除节点】的下一个节点,也就是直接跳过删除节点来做删除节点操作

5.返回虚拟节点,又从头开始有一个新链表

复制代码
# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        dummyhead = ListNode(0, head)
        fast = slow = dummyhead
        for i in range(n + 1):
            fast = fast.next
        while fast:
            fast = fast.next
            slow = slow.next
        slow.next = slow.next.next
        return dummyhead.next


if __name__ == '__main__':
    a = Solution()
    head = [1, 2, 3, 4, 5]
    n = 2
    print(a.removeNthFromEnd(head,n))
复制代码

 

 

 

 

 

 

 

 

posted @   陈晓猛  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2022-03-12 JZ44 数字序列中某一位的数字
2021-03-12 python学习笔记(四)---函数式编程
2018-03-12 Ubuntu上的相关问题
点击右上角即可分享
微信分享提示