(C语言)求链表的倒数第m个元素(双指针法)

写在所有的前面:

本文采用C语言实现代码

目录

  • 写在所有的前面:
  • 题目说明
    • 题目:
      • 题目出处
      • 题目描述Description
      • 输入Input
      • 输出Output
      • 样例Sample
      • 限制Hint
  • 解答说明
    • 方案1
      • 解题思路
        • 一般情况
        • 特殊情况
      • 代码实现
      • 其他解释

题目说明

题目:

题目出处

pta
《数据结构》

题目描述Description

请设计时间和空间上都尽可能高效的算法,在不改变链表的前提下,求链式存储的线性表的倒数第m(>0)个元素。
如果这样的元素不存在,则返回一个错误标志 ERROR = -1。

输入Input

第一行:一个整数n,线性表元素个数
第二行:n个整数,即线性表数列
第三行:一个整数m,即查找倒数第m个

输出Output

查找到的倒数第m个数字

样例Sample

输入:

5
1 2 4 5 6
3

输出:

4

限制Hint

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

解答说明

方案1

解题思路

双指针,间隔为m,遍历一次即可

一般情况

前指针先走,间隔值 x ++,当两者间隔 x == m 时,后指针再走,
前指针遍历完时,后指针所指即为倒数第m个数字。

特殊情况

x < m :倒数的 m > 总个数 n,即没有查找到,返回ERROR

代码实现

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <stdlib.h>#define ERROR -1typedef int ElementType;typedef struct Node* PtrToNode;//指针类型struct Node {ElementType Data;//数据域 intPtrToNode   Next;//指针域
};typedef PtrToNode List;//指针重命名为ListList Read()
{int n;                                          //链节个数scanf("%d", &n);                                //输入链节个数List p = (List)malloc(sizeof(Node));            //定义当前指针并开辟头指针链结空间p->Data = 0;                                    //链表长度p->Next = NULL;                                 //初始化头指针List head = p;                                  //真正的头指针for (int i = 0; i < n; i++)                     //输入n次数据{p->Next = (List)malloc(sizeof(Node));       //开辟下一链结空间scanf("%d", &p->Next->Data);                //输入下一链结内容p = p->Next;                                //更新当前指针p到下一个p->Next = NULL;head->Data++;                               //更新链表长度++}return head;                                    //返回头指针
}ElementType Find(List L, int m)
{if (L->Next == NULL)return ERROR;               //空链表List f = L->Next, l = L->Next;                  //前指针 f 指向头结点 1,后指针 l 指向结点 1int x = 1;                                      //初始化两指针差值while (l->Next)                                 //f 指针指向最后一个结点{l = l->Next;                                //更新后指针if (x == m)                                 //差值已经达到 mf = f->Next;                            //更新前指针elsex++;                                    //更新差值}if (x == m)                                     //差值已经到达 mreturn f->Data;                             //返回倒数第 m 个值elsereturn ERROR;                               //返回未找到
}int main()
{List L;                                         //定义链表头指针int m;                                          //查询倒数第m个L = Read();                                     //输入链表内容scanf("%d", &m);                                //输入mprintf("%d\n", Find(L, m));                     //输出查询内容return 0;
}

其他解释

原为函数题,只要求写ElementType Find( List L, int m );函数,个人把它补完了,双指针的方法应该是在单链表且固定为尾插法输入的情况下,最优化的方法了…吧?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android SELinux权限适配

抓log方法&#xff0c; setenforce 0, 如果不先将selinux设置为permission mode&#xff0c;会导致一个问题。 程序运行的时候遇到权限策略限制&#xff08;假设 sepolicy 1&#xff09;&#xff0c;程序运行失败。添加权限&#xff08;sepolicy 1&#xff09;&#xff0c;然后…

Mysql 删除表的所有数据

在 MySQL 中&#xff0c;如果你想要删除一个表中的所有数据&#xff0c;可以使用 TRUNCATE TABLE 命令或者 DELETE 语句。下面是两种方法的对比以及如何使用它们&#xff1a; 使用 TRUNCATE TABLE TRUNCATE TABLE 是一个非常快速的方法来删除表中的所有记录&#xff0c;并且它…

Rasa:开源的机器学习框架

一、Rasa简介 Rasa是一套用来构建基于上下文的AI小助手和聊天机器人框架。 分为两个主要的模块&#xff1a; NLU&#xff1a;自然语言理解模块&#xff0c;实现意图识别以及槽值的提取&#xff0c;将用户的输入转化为结构性数据&#xff0c;在训练过程中&#xff0c;为了提高…

工作日志:el-table在无数据情况下,出现横向滚动条。

1、遇到一个警告。 原因&#xff1a;中的组件不能呈现动画的非元素根节点。 也就是说&#xff0c;Transition包裹的必须是一个单根的组件。 2、el-table在无数据情况下&#xff0c;出现横向滚动条&#xff0c;大概跟边框的设置有关系。 开始排查。 给.el-scrollbar加了一个…

电影《749局》酷燃首映 苗苗神秘感大片释出氛围感拉满

2024 年 9 月 30 日&#xff0c;电影《749 局》在北京举办首映礼&#xff0c;导演陆川携主创王俊凯、苗苗、郑恺、任敏、李晨、杨皓宇出席&#xff0c;演员苗苗在片中饰演 749 局成员夏婳&#xff0c;这个角色天赋异禀&#xff0c;拥有特殊异能&#xff0c;为影片增添一抹神秘色…

如何微信多开

目录 1.找到微信在文件夹的位置 2.建文本&#xff0c;放代码 3.保存文本&#xff0c;更改后缀 4.使用 1.找到微信在文件夹的位置 1.首先找到你微信所在的文件夹&#xff0c;有桌面图标的点击右键属性&#xff0c;找到微信快捷启动exe程序。 2.建文本&#xff0c;放代码 2.…

WebAssembly 为什么能提升性能,怎么使用它 ?

文章目录 简介&#xff1a;起源&#xff1a;前端性能提升历史JIT&#xff08;Just-In-Time&#xff09;编译器(即时编译) 为什么需要WebAssembly&#xff1a;WebAssembly能做什么&#xff1a;经常说WASM的性能高&#xff0c;为什么高&#xff1f;&#xff1f;使用方法:Emscript…

ServiceEntry WorkloadEntry WorkloadGroup

"ServiceEntry", "WorkloadEntry", 和 "WorkloadGroup" 都是与 Istio 服务网格相关的概念。Istio 是一个连接、保护、控制和观察服务之间交互的平台&#xff0c;它允许您管理微服务网络&#xff0c;而无需直接处理服务的逻辑。 ServiceEntry S…

使用AOP处理参数

说明&#xff1a;在一些时候&#xff0c;我们需要在接口介绍到参数前处理参数&#xff0c;像参数校验、参数转换等&#xff0c;本文介绍如何使用AOP来实现此需求。 场景 需求&#xff1a;有一批开放给第三方调用的接口&#xff0c;之前传递的都是用户表的ID&#xff0c;现在需…

JavaSE总结

1. Java环境基础 JVM, JRE 和 JDK JVM&#xff08;Java Virtual Machine&#xff09;: 是 Java 虚拟机&#xff0c;负责执行 Java 字节码。JVM 提供了平台无关性&#xff0c;使得 Java 程序可以在不同操作系统上运行。JRE&#xff08;Java Runtime Environment&#xff09;: …

浅谈C++ 多线程锁处理

一、基本介绍 在C中&#xff0c;多线程编程同样需要处理线程安全问题&#xff0c;C11及更高版本提供了一套标准库来支持多线程编程&#xff0c;包括锁的处理。 二、常见锁处理方式 互斥锁&#xff08;std::mutex&#xff09;&#xff1a; std::mutex是最基本的锁类型&#xf…

“改善就医感受 提升患者体验”经验交流首场活动在呼市顺利举行

2024年9月26日至27日&#xff0c;以“医疗机构高质量发展 促进医改全面深化”为主题的“改善就医感受 提升患者体验”经验交流系列活动&#xff08;以下简称&#xff1a;系列活动&#xff09;首场活动在内蒙古呼和浩特顺利举行。 活动现场 患者体验&#xff0c;并不等同于患者…

网站架构部署——LAMP、LNMP

文章目录 网站架构部署——LAMP、LNMPLAMP安装顺序编译安装Apache httpd服务编译安装mysqld 服务编译安装PHP 解析环境安装论坛安装博客 LNMPyum集中式安装LNMPyum分布式安装LNMP20.0.0.50安装nginx20.0.0.51安装mysql20.0.0.52安装php20.0.0.50配置 nginx 支持 PHP 解析测试my…

CleanMyMac X v4.12.1 中文破解版 Mac优化清理工具

在数字时代&#xff0c;我们的Mac设备承载着越来越多的重要信息和日常任务。然而&#xff0c;随着时间的推移&#xff0c;这些设备可能会变得缓慢、混乱&#xff0c;甚至充满不必要的文件。这就是CleanMyMac X发挥作用的地方。 CleanMyMac X是一款功能强大的Mac优化工具&#…

获取 Jupyter Notebook IPython kernel 在电脑中的目录位置

获取 Jupyter Notebook IPython kernel 在电脑中的目录位置 正文 正文 在 VS code 的 terminal 中或者 Windows 的命令行中使用如下代码即可。 ipython locate运行后得到如下结果&#xff1a; 如图所示&#xff0c;我们获取到了 ipython 的位置。 如果大家觉得有用&#xf…

自动驾驶汽车横向控制方法研究综述

【摘要】 为实现精确、稳定的横向控制&#xff0c;提高车辆自主行驶的安全性和保障乘坐舒适性&#xff0c;综述了近年来自动驾驶汽车横向控制方法的最新进展&#xff0c;包括经典控制方法和基于深度学习的方法&#xff0c;讨论了各类方法的性能特点及在应用中的优缺点&#xff…

使用transformers调用owlv2实现开放目标检测

目录 安装Demo 安装 pip install transformersDemo from PIL import Image, ImageDraw, ImageFont import numpy as np import torch from transformers import AutoProcessor, Owlv2ForObjectDetection from transformers.utils.constants import OPENAI_CLIP_MEAN, OPENAI_…

PTA L1-079 天梯赛的善良

L1-079 天梯赛的善良&#xff08;20分&#xff09; 天梯赛是个善良的比赛。善良的命题组希望将题目难度控制在一个范围内&#xff0c;使得每个参赛的学生都有能做出来的题目&#xff0c;并且最厉害的学生也要非常努力才有可能得到高分。 于是命题组首先将编程能力划分成了 10…

Python日常搜索_random

random.random() 返回随机生成的一个实数&#xff0c;它在[0,1)范围内random.uniform random.uniform(a, b)&#xff0c;用于生成一个指定范围内的随机符点数&#xff0c;两个参数其中一个是上限&#xff0c;一个是下限。如果a > b&#xff0c;则生成的随机数n: b < n &l…

现实的谷歌SEO服务商是怎样的?

许多客户在咨询SEO服务时&#xff0c;常常会问到如何在短时间内将某个关键词推上谷歌首页&#xff0c;甚至是第一名。对于这种问题&#xff0c;专业的SEO服务商通常无言以对。SEO的基础是网站本身&#xff0c;而并非凭空捏造或者一夜之间就能实现效果的 SEO需要从网站的基本情况…