LeetCode-19 删除链表倒数第N个结点

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: LeetCode-19 删除链表倒数第N个结点

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list

题目描述

给你一个链表,删除链表的倒数第 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个结点,这里可以用双指针法,让指针p线走n-1步,然后指针q再行动,这样,指针p走到结尾的时候,指针q总会走到倒数第n个结点,同时用指针l来记录倒数第n-1个结点方便删除后重新连接链表。

代码展示

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
*/
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode *p = head, *q = head, *l = head;
        while(p->next != NULL)
        {
            p = p->next;
            n--;
            if(n <= 0)
            {
                l = q;
                q = q->next;
            }
        }
        if(q == head)
        {
            head = q->next;
        }
        else
        {
            l->next = q->next;
        }
        delete q;
        return head;
    }
};

运行结果

 



相关文章
|
5天前
题目----力扣--回文链表
题目----力扣--回文链表
11 0
|
5天前
题目----力扣--合并两个有序链表
题目----力扣--合并两个有序链表
8 0
|
5天前
题目----力扣--反转链表
题目----力扣--反转链表
13 0
|
5天前
题目----力扣--链表的中间结点
题目----力扣--链表的中间结点
6 0
|
5天前
题目----力扣--移除链表元素
题目----力扣--移除链表元素
11 1
|
5天前
查找两个链表的第一个公共结点
查找两个链表的第一个公共结点
13 0
|
6天前
|
索引
【力扣刷题】两数求和、移动零、相交链表、反转链表
【力扣刷题】两数求和、移动零、相交链表、反转链表
14 2
【力扣刷题】两数求和、移动零、相交链表、反转链表
|
5天前
|
算法
"刷题记录:哈希表+双指针 | leetcode-2465. 不同的平均值数目 "
该文段是一篇关于编程题目的解答,主要讨论如何找到数组中所有不同平均值的个数。作者首先使用排序和哈希集来解决,将数组转为列表排序后,通过双指针计算平均值并存入哈希集以去重。然后,作者发现可以优化方案,通过双指针在排序后的数组中直接计算两数之和,用哈希集记录不重复的和,从而避免实际计算平均值,提高了算法效率。最终代码展示了这两种方法。
13 0
|
6天前
|
索引
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
12 0
|
6天前
|
存储 算法 索引
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
16 1