【Golang】LeetCode 19. 删除链表的倒数第 N 个节点

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

题目描述

思路

解决这道题目我们不需要使用 Map 或是额外的数据结构对链表当中的节点顺序进行维护,只需要知道当前链表的长度并新建一个dummyNode并令dummyNode.Next = head,即可解决本题。

具体来说,我们先对链表进行一次遍历以统计链表的长度,假定是lengthlength - n这个位置所对应的节点(从1开始,针对示例 1,这个节点就是从前数第三个节点,其值为3)就是我们需要删除的节点的前序节点。

我们令p, q := dummyNode, head,同时将它们向后移动length - n次,发现p所在的位置就是第三个节点,q所在的位置就是要删除的第四个节点(倒数第二个节点)。此时令p.Next = q.Next并返回dummyNode.Next即可解决问题。

Golang 题解

go 复制代码
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func removeNthFromEnd(head *ListNode, n int) *ListNode {
    length := 0
    p := head
    for p != nil {
        length ++
        p = p.Next
    }

    dummyNode := new(ListNode)
    dummyNode.Next = head

    p, q := dummyNode, head
    for i := 0; i < length - n; i ++ {
        p, q = p.Next, q.Next
    }

    p.Next = q.Next
    return dummyNode.Next
}
相关推荐
池塘的蜗牛14 小时前
mmse-based-OFDM-signal-processing(2)
算法
平生不喜凡桃李14 小时前
Leetcode-240 :搜索二维矩阵
leetcode·矩阵·深度优先
Kris_LinSD14 小时前
算法小实验——分治算法快速排序问题实验(含报告)
c语言·算法
Super小白&14 小时前
十大经典排序算法详解(附C语言实现+复杂度分析)
c语言·算法·排序算法
Eloudy14 小时前
Birkhoff 多胞形,双随机矩阵的几何世界
算法
2503_9469718614 小时前
【SystemDesign/HA】2025年度高可用分布式仿真节点与预测模型容灾演练配置 (Disaster Recovery Config)
大数据·分布式·算法·系统架构·数据集
GrowingYi14 小时前
算法基础技术栈
数据结构·算法
炽烈小老头14 小时前
【 每天学习一点算法 2026/01/04】打家劫舍
学习·算法
leiming614 小时前
c++ for_each算法
开发语言·c++·算法