求链表的倒数第m个元素

简介: 求链表的倒数第m个元素

描述:给你一个链表,链表长度为n,链表内各元素为$a1,a2…an,给你一个数m,求链表倒数第m个数是多少。


#include<bits/stdc++.h> 
using namespace std;
struct Node{
  int Date;
  struct Node* next; 
};
int n,m;
typedef struct Node* List;//建立链表 
void InitList(List &headNode)
{
  headNode=(List)malloc(sizeof(Node));
  headNode -> next = NULL;  
}//初始化链表,使用void类型注意引用 
void AddNode(List Lists,int date)
{
  List NewNode = (List)malloc(sizeof(Node));
  List p=Lists;
  while(p -> next!=NULL)
  {
  p = p -> next;
  }
  p -> next = NewNode; 
  NewNode -> Date = date;
  NewNode -> next = NULL;
}//尾插函数 
void PrintfList(List Lists)
{
  List p=Lists -> next;
  while(p!=NULL)
  {
  cout<<p->Date<<" ";
  p = p->next;
  }
}//打印函数,用来纠错和检查 
void DestroyList(List &Lists)
{
  List p1;
  while(Lists)
  {
  p1=Lists -> next;
  free(Lists);
  Lists = p1;
  }
}//销毁函数,用头指针和中间指针逐步释放内存 
List FindMthNode(List Lists,int m1)
{
  int k=n-m1;
  List p=Lists -> next;
  while(k--)
  {
  p = p -> next;  
  }
  return p;
}//找到倒数第 m 个元素即是正数第 n - m 个 
int main()
{
  cin>>n;
  List listA;
  InitList(listA);
  for(int i=0;i<n;i++)
  {
  int v;
  cin>>v;
  AddNode(listA,v);
  }
//  PrintfList(listA);
  cin>>m;
  List p=FindMthNode(listA,m);
  if(p!=NULL)
  {
  cout<<p -> Date;
  }
  DestroyList(listA);
  return 0; 
}


对代码有任何不懂的地方可以去看看

链表合并

这篇文章,较为详细;

欢迎留言讨论;


目录
相关文章
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
306 1
|
机器学习/深度学习 算法
24. 两两交换链表中的节点, 19.删除链表的倒数第N个节点 ,面试题 02.07. 链表相交
1. **两两交换链表中的节点**:通过引入虚拟头结点,使所有节点都能采用统一的交换逻辑,避免对头结点单独处理。 2. **删除链表的倒数第N个节点**:利用双指针技巧,让快慢指针保持N个节点的距离,当快指针到达末尾时,慢指针正好指向待删除节点的前一个节点。 3. **链表相交**:先计算两链表长度并调整起点,确保从相同距离末尾的位置开始遍历,从而高效找到相交节点或确定无交点。 以上方法均在时间复杂度和空间复杂度上进行了优化,适合用于理解和掌握链表的基本操作及常见算法设计思路。
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
401 1
203. 移除链表元素,707.设计链表,206. 反转链表
链表是数据结构中的重要概念,包含单链表、双链表和循环链表。单链表每个节点存储数据与下一节点指针;双链表增加上一节点指针;循环链表首尾相连。 **例题解析:** 1. **203. 移除链表元素**:通过遍历链表删除指定值节点,注意处理头节点特殊情况。 2. **707. 设计链表**:实现链表的增删查操作,需理解指针操作逻辑,避免直接修改目标节点。 3. **206. 反转链表**:采用双指针或递归方法改变节点指向,完成链表反转。 以上题目涵盖链表核心操作,掌握后可灵活应对相关问题。
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
355 0
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题删除链表的倒数第 N 个结点
该文章介绍了 LeetCode 第 19 题删除链表的倒数第 N 个结点的解法,通过使用快慢双指针,先将快指针移动 n 步,然后快慢指针一起遍历,直到快指针到达链尾,从而找到倒数第 N 个结点的前一个结点进行删除,同时总结了快慢指针可减少链表遍历次数的特点。
LeetCode第19题删除链表的倒数第 N 个结点
|
存储 C语言
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
389 0
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍