首页 > 其他分享 >19删除链表的倒数第N个节点

19删除链表的倒数第N个节点

时间:2022-09-01 23:44:51浏览次数:86  
标签:head slow 19 fast next 链表 节点 倒数第

题目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]

注意:n>=1

思路

双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。
注意点:

  • 推荐大家使用虚拟头结点,这样方便处理删除实际头结点的逻辑
  • 定义fast指针和slow指针,初始值为虚拟头结点
  • fast首先走n + 1步 ,为什么是n+1呢,因为只有这样同时移动的时候slow才能指向删除节点的上一个节点(方便做删除操作)
  • fast和slow同时移动,直到fast指向末尾的Null

代码

# 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: Optional[ListNode], n: int) -> Optional[ListNode]:
        dummy_head = ListNode(next=head)  # 建立虚拟节点
        slow, fast = dummy_head, dummy_head
        for _ in range(n+1):  # n+1是为了让快指针多走一步,找到了倒数第n+1节点便于删除第n个节点
            fast = fast.next
        while fast != None:
            slow = slow.next
            fast = fast.next
        slow.next = slow.next.next
        return dummy_head.next

标签:head,slow,19,fast,next,链表,节点,倒数第
From: https://www.cnblogs.com/edkong/p/16648244.html

相关文章

  • OGG 19.1 打补丁(19.1.0.0.220419)
    OGG从12.1.2开始,已经变成图形界面安装,类似于ORACLE软件安装。针对OGG的补丁安装也与ORACLE软件基本一致。(1)、更新OPATCH。OGG软件目录中自带的OPATCH版本太老了,需要更......
  • 题02-线性结构1 两个有序链表序列的合并(代码和笔记)
    @目录题目思路补充的代码题目本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:ListMerge(ListL1,ListL2);其中Li......
  • MATLAB R2019b安装 及其启动慢的解决方案
       MATLAB是一款商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。可以进行矩阵运算、......
  • [BZOJ4919]大根堆 解题报告
    [BZOJ4919]大根堆Description给定一棵\(n\)个节点的有根树,编号依次为\(1\)到\(n\),其中\(1\)号点为根节点。每个点有一个权值\(v_i\)。你需要将这棵树转化成一个大根堆。......
  • 数据库学习笔记 (本数据库学习笔记以SQL sever 2019 为例进行学习) 20220831 第四节课
    两层映像两层映像E-CMapping:ExternalSchema-ConceptualSchemaMapping----将外模式映射为概念模式,从而支持实现数据概念视图向外部视图的转换----便于用户观察和......
  • 24 两两交换链表中的节点
    题目24两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输......
  • leetcode 206. Reverse Linked List 反转链表(简单)
    一、题目大意给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:......
  • 链表的头插法和尾插法
    复习一下链表的插入操作头插法创建一个临时节点存放数据将头部指针后面的数据都链接到这个临时节点后面将这个临时节点再链接到头部指针后面尾插法创建......
  • 206 反转链表
    题目206反转链表给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例......
  • K8s包管理工具Helm v3(19)
    一、Helm概述官网:https://v3.helm.sh/zh/docs/https://helm.sh/helm官方的chart站点:https://hub.kubeapps.com/Helm是kubernetes的包管理工具,相当于linux环境......