【LeetCode】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

**进阶:**你能尝试使用一趟扫描实现吗?

解题思路:

先计算出长度,再计算出第几个是需要被删除的结点,在这个节点的前一个结点停止,并删除下一个节点,然后返回。

代码解释:

dummy表示head前的一个结点,防止找不到头结点;

代码:

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    struct ListNode* dummy=(struct ListNode*)malloc(sizeof(struct ListNode));
    dummy->next=head;
    int len=0;
    while(head!=NULL)
    {
        head=head->next;
        len++;
    }
    head=dummy->next;
    if(len==n) return dummy->next->next;
    for(int i=0;i<len-n-1;i++)
    {
        head=head->next;
    }
    if(head->next!=NULL) head->next=head->next->next;
    else return NULL;
    return dummy->next;
}
相关推荐
阿Y加油吧7 分钟前
力扣打卡——搜索二维矩阵、相交链表
线性代数·leetcode·矩阵
普贤莲花11 分钟前
【2026年第11周---写于20260322】
程序人生·算法·leetcode
小白自救计划14 分钟前
力扣知识点杂集
算法·leetcode·哈希算法
阿贵---17 分钟前
分布式系统C++实现
开发语言·c++·算法
不染尘.18 分钟前
最短路径之Bellman-Ford算法
开发语言·数据结构·c++·算法·图论
big_rabbit050221 分钟前
JVM堆内存查看命令
java·linux·算法
m0_6625779723 分钟前
C++中的RAII技术深入
开发语言·c++·算法
旖-旎23 分钟前
二分查找(点名)(8)
c++·算法·二分查找·力扣
承渊政道26 分钟前
【优选算法】(实战体验滑动窗口的奇妙之旅)
c语言·c++·笔记·学习·算法·leetcode·visual studio
lemonth28 分钟前
图形推理----
人工智能·算法·机器学习