求链表的倒数第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; 
}


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

链表合并

这篇文章,较为详细;

欢迎留言讨论;


目录
相关文章
|
4天前
19 删除链表的倒数第 N 个结点
19 删除链表的倒数第 N 个结点
|
4天前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
4天前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
4天前
leetcode代码记录(移除链表元素
leetcode代码记录(移除链表元素
10 0
|
4天前
|
存储 Java
高效删除链表倒数节点最优实现
要删除链表的倒数第 n 个节点,并返回链表的头节点,我们可以使用一趟扫描的方法来实现。这个方法涉及使用两个指针:快指针和慢指针。
|
4天前
19. 删除链表的倒数第 N 个结点
19. 删除链表的倒数第 N 个结点
|
4天前
|
存储
三种方法实现获取链表中的倒数第n个元素
三种方法实现获取链表中的倒数第n个元素
15 0
|
4天前
【力扣】19. 删除链表的倒数第 N 个结点
【力扣】19. 删除链表的倒数第 N 个结点
|
4天前
【力扣】83. 删除排序链表中的重复元素、82. 删除排序链表中的重复元素Ⅱ
【力扣】83. 删除排序链表中的重复元素、82. 删除排序链表中的重复元素Ⅱ
|
4天前
|
存储 JavaScript
leetcode82. 删除排序链表中的重复元素 II
leetcode82. 删除排序链表中的重复元素 II
25 0