LeetCode-热题100: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

代码及注释

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func removeNthFromEnd(head *ListNode, n int) *ListNode {
    // 初始化当前节点为链表头部
    cur := head
    
    // 创建一个哑节点作为链表的起始点
    dummy := &ListNode{
        Next: head,
    }
    
    // 初始化前一个节点为哑节点
    pre := dummy
    
    // 遍历链表
    for cur != nil {
        // 如果 n 大于 0,继续前进直到 n 为 0
        if n > 0 {
            n--
        } else {
            // 如果 n 小于等于 0,前一个节点也前进
            pre = pre.Next
        }
        cur = cur.Next
    }
    
    // 删除倒数第 n 个节点
    pre.Next = pre.Next.Next
    
    // 返回链表的头部(哑节点的下一个节点)
    return dummy.Next
}

代码解释

这里使用了两个指针,curpre,它们都从链表的起始位置开始。首先,cur 指针先移动 n 步,然后 curpre 指针一起向前移动,直到 cur 到达链表的末尾。此时,pre 指针就指向了需要删除的节点的前一个节点。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 02:04:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 02:04:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 02:04:03       82 阅读
  4. Python语言-面向对象

    2024-04-09 02:04:03       91 阅读

热门阅读

  1. 23种设计模式的概念

    2024-04-09 02:04:03       29 阅读
  2. TCP协议

    TCP协议

    2024-04-09 02:04:03      32 阅读
  3. Leetcode 482. 密钥格式化

    2024-04-09 02:04:03       33 阅读
  4. CentOS7编译ZLMediaKit并使能WebRTC

    2024-04-09 02:04:03       40 阅读
  5. Android 允许其他应用读取本应用的私有目录

    2024-04-09 02:04:03       32 阅读
  6. 大模型日报2024-04-08

    2024-04-09 02:04:03       42 阅读
  7. 蓝桥杯刷题 前缀和与差分-[2080]求和(C++)

    2024-04-09 02:04:03       37 阅读
  8. Linux C++ 013-封装

    2024-04-09 02:04:03       42 阅读
  9. 我让GPT4为OriginBot开发了一个监控功能

    2024-04-09 02:04:03       36 阅读
  10. 深度学习相关概念梳理

    2024-04-09 02:04:03       38 阅读