函数题:LinkList6-查询单链表倒数第K个链点的元素【有题解视频】
带头结点的单链表A,头指针为h,该单链表A中存储了一系列正整数,设计算法FindInvertedK( ),查找并输出倒数第K个位置上的数字,如果K超过单链表长度,需要报错。
带头结点的单链表结点定义如下:
c
typedef int DataType;
typedef struct Node
{
DataType data; // data域用于存储数据元素
struct Node *next; // next域用于存放指向其后继的指针
}LNode, *PNode, *LinkList; // LinkList为头指针
### 函数接口定义:
c
int FindInvertedK( LinkList a , int posRevK, DataType *rst);
其中 a ,posRevK 是用户传入的参数,其中 a是单链表的头指针,posRevK 代表需要查找的倒数第posRevK个位置,*rst接收查找到的倒数第K个链点的元素值,返回值代表查找成功与否。
### 裁判测试程序样例:
c
#include <stdio.h>
int InitLinkList(LinkList *head); /* 初始化链表, 细节在此不表 */
int LinkListInsert(LinkList h, int pos, DataType x) ; /* 向链表插入新元素,细节在此不表 */
void TraverseLinkList(LinkList h); /* 遍历单链表,细节在此不表 */
void DestroyLinkList(LinkList h); /* 销毁单链表,细节在此不表 */
int FindInvertedK( LinkList a , int posRevK, DataType *rst);
int main()
{
LinkList h;
char ch;
DataType x;
int K,pos = 1,flag = 0;
InitLinkList(&h);
do
{
scanf("%d",&x);
LinkListInsert( h , pos++ , x );
}while((ch=getchar())!='\n');
scanf("%d",&K);
flag = FindInvertedK( h , K , &x);
if ( flag!=0 )
{
printf("单链表A中的倒数第%d个数据元素是%d\n", K , x );
}
else
{
printf("单链表没有倒数第%d个链点,查找数据元素失败\n", K);
}
DestroyLinkList( h );
return 0;
/* 请在这里填写答案 */
### 输入样例:
in
12 56 89 42 30 96 11
4
### 输出样例:
out
单链表A中的倒数第4个数据元素是42
答案:若无答案欢迎评论
#写在前面的话#
首先感谢陈越老师提供的关于本题的参考资料,对我整理题解视频讲解思路提供了很大的帮助。
*提供题解视频,是为了帮助大家掌握算法的思想,在今后的编程、考试、面试中,换了语言,换了编译器,换了开发平台,都能重现这种思想,从而编写出任意语言任意编译器任意开发平台下面的这种算法的代码来,所以对于一打开题解报告,就直接拖到视频最后看参考代码的做法,我们非常不赞同,也不符合我们制作PPT录制讲解视频的初衷,希望大家体谅我们的苦心。*
https://www.bilibili.com/video/BV1Ni4y1y7sk/

带头结点的单链表结点定义如下:
c
typedef int DataType;
typedef struct Node
{
DataType data; // data域用于存储数据元素
struct Node *next; // next域用于存放指向其后继的指针
}LNode, *PNode, *LinkList; // LinkList为头指针
### 函数接口定义:
c
int FindInvertedK( LinkList a , int posRevK, DataType *rst);
其中 a ,posRevK 是用户传入的参数,其中 a是单链表的头指针,posRevK 代表需要查找的倒数第posRevK个位置,*rst接收查找到的倒数第K个链点的元素值,返回值代表查找成功与否。
### 裁判测试程序样例:
c
#include <stdio.h>
int InitLinkList(LinkList *head); /* 初始化链表, 细节在此不表 */
int LinkListInsert(LinkList h, int pos, DataType x) ; /* 向链表插入新元素,细节在此不表 */
void TraverseLinkList(LinkList h); /* 遍历单链表,细节在此不表 */
void DestroyLinkList(LinkList h); /* 销毁单链表,细节在此不表 */
int FindInvertedK( LinkList a , int posRevK, DataType *rst);
int main()
{
LinkList h;
char ch;
DataType x;
int K,pos = 1,flag = 0;
InitLinkList(&h);
do
{
scanf("%d",&x);
LinkListInsert( h , pos++ , x );
}while((ch=getchar())!='\n');
scanf("%d",&K);
flag = FindInvertedK( h , K , &x);
if ( flag!=0 )
{
printf("单链表A中的倒数第%d个数据元素是%d\n", K , x );
}
else
{
printf("单链表没有倒数第%d个链点,查找数据元素失败\n", K);
}
DestroyLinkList( h );
return 0;
/* 请在这里填写答案 */
### 输入样例:
in
12 56 89 42 30 96 11
4
### 输出样例:
out
单链表A中的倒数第4个数据元素是42
答案:若无答案欢迎评论
#写在前面的话#
首先感谢陈越老师提供的关于本题的参考资料,对我整理题解视频讲解思路提供了很大的帮助。
*提供题解视频,是为了帮助大家掌握算法的思想,在今后的编程、考试、面试中,换了语言,换了编译器,换了开发平台,都能重现这种思想,从而编写出任意语言任意编译器任意开发平台下面的这种算法的代码来,所以对于一打开题解报告,就直接拖到视频最后看参考代码的做法,我们非常不赞同,也不符合我们制作PPT录制讲解视频的初衷,希望大家体谅我们的苦心。*
https://www.bilibili.com/video/BV1Ni4y1y7sk/
