博客
关于我
19. 删除链表的倒数第N个节点
阅读量:551 次
发布时间:2019-03-09

本文共 1229 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要删除链表中的倒数第n个节点,并返回修改后的链表的头结点。为了实现这一点,我们可以使用一种高效的方法,仅使用一次遍历链表。

思路:double-pointer Technique

我们使用一个叫做双指针的方法,具体步骤如下:

  • 设置哨兵结点:在链表的头部添加一个哨兵结点,这样可以简化处理,尤其是当需要删除头结点时。
  • 初始化两个指针:令first指针指向哨兵结点,second指针指向哨兵结点的下一个结点(即链表的头结点)。
  • 移动指针:同时移动first和second指针,各移动n次。这样,第n次移动后,first将指向第n+1个结点,而second将指向倒数第n个结点的前驱节点。
  • 删除节点:修改second指针的下一个结点,使其指向second的下一个下一个结点,从而跳过待删除的节点。
  • 返回新的头结点:由于哨兵结点指向链表的原头,我们需要返回哨兵结点的下一个结点。
  • 这种方法实现了一次遍历,时间复杂度为O(n),空间复杂度为O(1),非常高效且节省内存。

    代码实现

    class Solution:    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:        # 哨兵结点作为头的前驱节点        sentinel = ListNode(0, head)        first = sentinel        second = sentinel                # 移动指针到n的位置        for _ in range(n):            first = first.next            second = second.next                # 修改第二个指针的下一个节点,使其跳过n个节点        second.next = second.next.next                # 返回新的头结点,即哨兵节点的下一个结点        return sentinel.next

    详细步骤解释

  • 哨兵结点创建:我们首先在链表的头部添加一个哨兵结点(dummy),this helps处理头结点的删除情况。

  • 指针初始化:创建两个指针first和second,第一个指针指向哨兵结点,第二个指针指向哨兵结点的下一个结点(即原链表的头结点)。

  • 移动指针:同时移动first和second指针n次。这样,当我们移动到正确的位置时,first将指向第n+1个结点,而second将正确指向所需删除结点的前驱节点。

  • 删除节点:修改second指针,将其下一个结点指向second的下一个下一个结点,从而跳过实际要删除的结点。

  • 返回新的头:返回哨兵结点的下一个结点,即为修改后的链表头结点。

  • 这种方法确保了我们只需要一次遍历,能够高效地删除链表的倒数第n个节点。

    转载地址:http://jnusz.baihongyu.com/

    你可能感兴趣的文章
    opencv9-膨胀和腐蚀
    查看>>
    OpenCV_ cv2.imshow()
    查看>>
    opencv——图像缩放1(resize)
    查看>>
    Opencv——模块介绍
    查看>>
    OpenCV与AI深度学习 | 2024年AI初学者需要掌握的热门技能有哪些?
    查看>>
    OpenCV与AI深度学习 | CIB-SE-YOLOv8: 优化的YOLOv8, 用于施工现场的安全设备实时检测 !
    查看>>
    OpenCV与AI深度学习 | OpenCV图像拼接--Stitching detailed使用与参数介绍
    查看>>
    OpenCV与AI深度学习 | OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测(建议收藏!)
    查看>>
    OpenCV与AI深度学习 | SAM2(Segment Anything Model 2)新一代分割一切大模型介绍与使用(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | YOLO11介绍及五大任务推理演示(目标检测,图像分割,图像分类,姿态检测,带方向目标检测)
    查看>>
    OpenCV与AI深度学习 | YOLOv11来了:将重新定义AI的可能性
    查看>>
    OpenCV与AI深度学习 | YOLOv8自定义数据集训练实现火焰和烟雾检测(代码+数据集!)
    查看>>
    OpenCV与AI深度学习 | YOLOv8重磅升级,新增旋转目标检测,又该学习了!
    查看>>
    OpenCV与AI深度学习 | 使用OpenCV轮廓检测提取图像前景
    查看>>
    OpenCV与AI深度学习 | 使用Python和OpenCV实现火焰检测(附源码)
    查看>>
    OpenCV与AI深度学习 | 使用PyTorch进行小样本学习的图像分类
    查看>>
    OpenCV与AI深度学习 | 使用YOLO11实现区域内目标跟踪
    查看>>
    OpenCV与AI深度学习 | 使用YOLOv8做目标检测、实例分割和图像分类(包含实例操作代码)
    查看>>
    OpenCV与AI深度学习 | 使用单相机对已知物体进行3D位置估计
    查看>>
    OpenCV与AI深度学习 | 初学者指南 -- 什么是迁移学习?
    查看>>