描述:给你一个链表,链表长度为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; }
对代码有任何不懂的地方可以去看看
链表合并
这篇文章,较为详细;
欢迎留言讨论;