【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
}
相关推荐
小张会进步2 分钟前
数组:二维数组
java·javascript·算法
佑白雪乐20 分钟前
LCR 175. 计算二叉树的深度
算法·深度优先
阿Y加油吧27 分钟前
力扣打卡day07——最大子数组和、合并区间
算法
想吃火锅100531 分钟前
【leetcode】105. 从前序与中序遍历序列构造二叉树
算法·leetcode·职场和发展
圣保罗的大教堂33 分钟前
leetcode 3567. 子矩阵的最小绝对差 中等
leetcode
2401_8318249638 分钟前
嵌入式C++驱动开发
开发语言·c++·算法
靠沿40 分钟前
【优选算法】专题十八——BFS解决拓扑排序问题
算法·宽度优先
cui_ruicheng43 分钟前
C++数据结构进阶:哈希表实现
数据结构·c++·算法·哈希算法·散列表
li星野1 小时前
[特殊字符] 模拟试卷一:C++核心与系统基础(90分钟)答案版
开发语言·c++·算法
二进制星轨1 小时前
leecode-283-移动零-算法题解
算法