【小浩算法cpp实现】删除链表的倒数第n个节点

embedded/2024/9/24 1:40:01/

目录

  • 前言
  • 我的思路
    • 思路一
    • 思路二
  • 我的代码

前言

今天继续学习算法,前几天觉得数组的题还是简单了,今天换个链表的,没想到也是考研期间学过的比较经典的链表算法,就当复习cpp啦!

我的思路

首先我觉得大家应该已经懂了链表是怎么实现删除的,假设待删除的Lnode的前指针是pre,只需要pre -> next= pre->next->next即可。

思路一

我们最常见的思路是把倒数变成正数,所以如果我们能知道链表的长度,那倒数第一个不就是正数最后一个吗,倒数第k个就是正数第n-k+1。这个思路需要遍历2次。

思路二

另一种思路也很经典,我们需要两个指针,假设我们要找第2个元素,那么两个指针一前一后遍历,当前一个指针遍历到链表的最后一个元素时,后一个指针自然就指到倒数第二个元素了(注意删除的时候需要pre指针)。总的来说,我们需要两个指针之间的间距是(k-2),或者让一个指针从头结点开始,先走k个距离

我的代码

#include<iostream>using namespace std;typedef struct Lnode {int x;struct Lnode* next;Lnode(int val) :x(val), next(NULL) {}
};int main() {cout << "请输入链表的总数" << endl;int node_num;cin >> node_num;int node;//把链表的总长度存储在头结点的数据域Lnode* head = new Lnode(node_num);Lnode* p=head;Lnode* q;for (int i = 0; i < node_num; i++) {cin >> node;q = new Lnode(node);p->next = q;p = p->next;}p = head -> next;//输出生成的链表while (p ->next!= NULL) {cout << p->x<<" -> ";p = p->next;}cout << p->x;cout << "\n请输入您想删除倒数第几个节点" << endl;int del_place;cin >> del_place;if (del_place > node_num) {cout << "对不起,您输入的值大于链表总长度,删除失败";}else {Lnode* r=head, *s=head;int diff_place = del_place;while (diff_place != 0) {s = s->next;diff_place--;}while (s -> next != NULL) {s = s->next;r = r->next;}Lnode* del_node;del_node = r->next;r->next = r->next->next;delete del_node;del_node = NULL;}p = head->next;//输出生成的链表while (p->next != NULL) {cout << p->x << " -> ";p = p->next;}cout << p->x;}

http://www.ppmy.cn/embedded/12964.html

相关文章

C++基本输入输出

C 中的输入和输出&#xff08; I/O &#xff09;主要是通过标准库中的输入输出流来实现的。最常用的是 iostream 1. 库&#xff0c;它提供了用于输入和输出的基本流类&#xff0c;包括 cin 、 cout 、 cerr 和 clog 。 1.标准输出流 ( cout ) cout 代表标准输出流&a…

Jenkins和gitlab实现CICD

1 背景 在开发TracerBackend服务的时候&#xff0c;每次更改代码之后需要推送到gitlab&#xff0c;然后ssh登录到Ubuntu的服务器上部署新的代码。服务成功启动之后&#xff0c;在本地执行测试用例&#xff0c;觉得这一套操作流程还是挺复杂的。想起公司的代码发布流程&#xf…

Checkpoint机制和生产配置

1.前提 在将Checkpoint之前&#xff0c;先回顾一下flink处理数据的流程&#xff1a; 2. 概述 Checkpoint机制&#xff0c;又叫容错机制&#xff0c;可以保证流式任务中&#xff0c;不会因为异常时等原因&#xff0c;造成任务异常退出。可以保证任务正常运行。 &#xff08;1&…

小米汽车超级工厂智能物流

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 小米汽车超级工厂以其先进的智能物流系统&#xff0c;标志着汽车制造业在智能化和自动化方面迈出了重要一步。该工厂采用物联网(IoT)技术&#xff0c;实…

卷王问卷考试系统/SurveyKing调查系统源码

SurveyKing是一个功能强大的开源调查问卷和考试系统&#xff0c;它能够快速部署并适用于各个行业。 这个系统提供了在线表单设计、数据收集、统计和分析等功能&#xff0c;支持20多种题型&#xff0c;提供多种创建问卷的方式和设置。 项 目 地 址 &#xff1a; runruncode.c…

【1425】java 外籍人员管理系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java 外籍人员管理系统是一套完善的java web信息管理系统 采用serlvetdaobean&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式 开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff…

Laravel 6 - 第十六章 Artisan命令

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

分组排序取第一条数据 SQL写法

1. 背景 在数据库查询过程中经常遇到需要分组排序查询第一条数据的情况。例如&#xff0c;在消息列表中需要展示每个联系人最近的一条信息。 2. 解决方案 目前我接触到的解决方案有两种&#xff0c;分别是开窗函数 row_number 和变量法。 2.1 开窗函数法 比较常用的解决方…