C++进阶练习删除链表的倒数第N个结点详解

C++进阶练习删除链表的倒数第N个结点详解

问题描述

给定一个单向链表的头指针和一个整数 n,要求删除这个链表的倒数第 n 个节点。例如,链表为 1→2→3→4→5,n = 2 时,删除倒数第二个节点后的链表为 1→2→3→5。

解法思路

先让一个指针指向链表头节点,再让另一个指针从头节点开始向后移动 n-1 步,此时两个指针之间有 n-1 个节点。然后同时向后移动两个指针,直到第二个指针指向 NULL,此时第一个指针指向的节点就是倒数第 n 个节点。

我们可以设置一个哑节点 dummy,令其next指针指向head,然后设置两个指针p和q,一开始都指向哑节点。先将q指针向后移动n个节点,然后p和q同时后移,直到q指向最后一个节点时停止,那么此时p指向的节点就是要删除的节点的前一个节点。

代码实现

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

ListNode* removeNthFromEnd(ListNode* head, int n) {
    ListNode* dummy = new ListNode(0);
    dummy->next = head;
    ListNode* p = dummy;
    ListNode* q = dummy;

    for (int i = 0; i < n; i++) {
        q = q->next;
    }

    while (q->next != NULL) {
        p = p->next;
        q = q->next;
    }

    ListNode* temp = p->next;
    p->next = p->next->next;
    delete temp;

    return dummy->next;
}

示例说明

示例1

输入:

1->2->3->4->5, n = 2

输出:

1->2->3->5

解释:

删除链表的倒数第二个节点(结点值为4),输出链表为1->2->3->5。

示例2

输入:

1->2->3->4->5, n = 5

输出:

2->3->4->5

解释:

删除链表的倒数第五个节点(结点值为1),输出链表为2->3->4->5。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++进阶练习删除链表的倒数第N个结点详解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 神盾加密解密教程(一)PHP变量可用字符

    神盾加密解密教程(一)PHP变量可用字符 简介 在PHP编程中,变量是存储数据的容器。在使用变量时,需要注意变量名的命名规则和可用字符。本教程将详细讲解PHP变量可用字符的规定。 可用字符规定 PHP变量名可以包含字母、数字和下划线(_),并且必须以字母或下划线开头。变量名对大小写敏感,即$myVar和$myvar是两个不同的变量。 以下是PHP变量名可用字…

    other 2023年8月9日
    00
  • unity的menuitem输入框

    Unity的MenuItem输入框 在Unity的Editor中,有时候我们需要在菜单栏中添加一些自定义的操作,这时就需要用到Unity提供的MenuItem。其中一个常用的功能就是在菜单栏中添加一个输入框,方便用户输入一些参数。 创建输入框 首先,我们需要在菜单栏中创建一个输入框,可以使用如下代码: [MenuItem("MyMenu/Input…

    其他 2023年3月28日
    00
  • FastDFS分布式文件系统环境搭建及安装过程解析

    提交FastDFS的作用 FastDFS是高性能、轻量级的分布式文件系统。它通过将文件存储在多个存储服务器中来实现快速访问和高可用性。FastDFS采用了分布式存储架构,将文件划分为多个块(Block),然后将每个块分别存储在不同的服务器上。 FastDFS的优点: 可靠性高:FastDFS的分布式存储架构,使它能够自动管理数据备份和恢复,保证数据的可靠性,…

    other 2023年6月27日
    00
  • java数据结构关于栈的实例应用

    Java数据结构之栈的实例应用攻略 1. 栈的概述 栈是一种具有特定操作规则的线性数据结构,遵循先进后出(Last-In-First-Out,LIFO)的原则。栈的操作包括入栈(push)和出栈(pop),以及获取栈顶元素(peek)等。 2. 栈的实例应用 2.1. 括号匹配 栈在括号匹配问题中有广泛的应用。通过使用栈,我们可以检查一个字符串中的括号是否匹…

    other 2023年8月6日
    00
  • 开通局域网共享(访问本机要填用户名和密码)的注册表和批处理

    开通局域网共享需要进行一些注册表和批处理的配置,具体步骤如下: 打开注册表编辑器(“运行” -> “regedit”)。 找到以下注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters 在Parameters节点下,右键选择“新建” ->…

    other 2023年6月27日
    00
  • 详解Python中while无限迭代循环方法

    详解Python中while无限迭代循环方法 在Python中,while循环是一种常用的迭代结构,它可以用于创建无限循环。在本攻略中,我们将详细讲解如何使用while循环来实现无限迭代,并提供两个示例说明。 1. 基本语法 while循环的基本语法如下: while condition: # 循环体 其中,condition是一个布尔表达式,当其值为Tru…

    other 2023年7月28日
    00
  • Fragment配合RadioGroup实现点击切换布局

    在Android开发中,我们经常需要实现点击切换布局的功能。其中,Fragment和RadioGroup是两个常用的组件。本文将介绍如何使用Fragment和RadioGroup实现点击切换布局的完整攻略,包括创建Fragment、使用RadioGroup监听点击事件、切换Fragment等内容,并提供两个示例说明。 1. 创建Fragment 在使用Fra…

    other 2023年5月5日
    00
  • Oracle Number型的深入理解

    Oracle Number类型的深入理解 什么是Oracle Number类型? Oracle Number类型是Oracle存储数字类型的一种,和其他数据库中的数字类型(比如MySQL的int)有所不同。Number类型是一种可变长度的数据类型,能处理极大或极小的数字,精度高达38位。 Oracle Number类型的数据存储 Oracle Number类…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部