题目 输出单链表 倒数第K个结点值【问题描述】输入一个单向链表,输出该链表中倒数第k个结点,链表的最后一个结点是倒数第1个节点。【输入形式】输入第一位为K值,其后接一串以空格分隔的整型值。【输出形式】输出为倒数第K个结点的值,若无,则输出Not Found【样例输入】3 13 45 54 32 1 4 98 2【样例输出】4【样例说明】K值为3,则输出链表倒数第3个结点的值,为4;数据输入间以空格隔开【评分标准】本题要综合输出正确性及使用的数据结构。需由输入数据构建单链表。不使用链表的将不得分。源代码#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node* next;}SLinkNode;void InitList(SLinkNode*& L) { L = (SLinkNode*)malloc(sizeof(SLinkNode)); L->next = NULL;}void InsElem(SLinkNode* L, int n) { SLinkNode* p = L; SLinkNode* s = p->next; while (s != NULL)  {  p = p->next;  s = s->next; } InitList(s); s->data = n; p->next = s;}int GetElem(SLinkNode* L, int i) { int j = 0; SLinkNode* p = L; if (i <= 0)  return 0; while(p!=NULL && j<i) {  j++;  p = p->next; } if (p == NULL)  return 0; else {  printf("%d", p->data);  return 1; }}int main(){ SLinkNode* L; InitList(L); int k, n, j; j = 0; scanf_s("%d", &k); while (getchar() != '\n') {  scanf_s("%d", &n);  InsElem(L, n);  j++; } k = j - k + 1; if (!GetElem(L, k)) {  printf("Not Found"); } return 0;}思路解析#define _CRT_SECURE_NO_WARNINGS/*这是一个预处理指令,用于禁用某些编译器的警告信息。具体来说,它禁用了使用不安全函数的警告信息。如果不加这个指令,当你使用一些被认为不安全的函数时,编译器会给出警告信息,但是加上这个指令后,编译器就不会再给出这些警告信息了。*/#include<stdio.h>   //C语言的头文件#include<stdlib.h>  //C++样式typedef struct node{  //单链表结点声明 int data; struct node* next;}SLinkNode;void InitList(SLinkNode*& L) { //初始化线性表 L = (SLinkNode*)malloc(sizeof(SLinkNode)); L->next = NULL;   //为空表}void InsElem(SLinkNode* L, int n) { SLinkNode* p = L; SLinkNode* s = p->next;  //设置两个指针 while (s != NULL)  {  p = p->next;  s = s->next; }  //两个指针前后遍历链表 InitList(s);  //初始化链表 s->data = n; p->next = s;}int GetElem(SLinkNode* L, int i) {  //查找第i个元素 int j = 0;  //计数 SLinkNode* p = L;  //设置指针 if (i <= 0)  return 0;    //需找元素不符合要求 while(p!=NULL && j<i)   //链表不为空 {  j++;  p = p->next; }   //遍历 if (p == NULL)    //链表为空  return 0; else    //不为空,则遍历输出值 {  printf("%d", p->data);  return 1; }}int main(){ SLinkNode* L;   //结点声明 InitList(L);     //初始化链表 int k, n, j;    //记录  首位  输入的数据   计数 j = 0;   //计数 scanf_s("%d", &k);    //用户输入首个数据 while (getchar() != '\n') {    //将其他数据一次插入链表  scanf_s("%d", &n);  InsElem(L, n);  j++; } k = j - k + 1;    //依照原序计算出正序的逆序位数 if (!GetElem(L, k)) {  printf("Not Found"); } return 0;}
点赞 0
评论 0
全部评论

相关推荐

03-31 18:02
门头沟学院 Java
白日梦想家_等打包版:不要的哦佛给我
点赞 评论 收藏
分享
暑期是进不了大厂了想问问前端友友们 ,后面应该如何沉淀自己,我想秋招再冲一下尤其是八股,应该抓哪一块是重点,理解到什么程度呢,要学到什么深度才能抗住拷打。还有场景题如何去准备。期待友友们的解答。
命烈焰带我飞走:找个中厂小厂先看看吧,去了熟悉熟悉项目,简历上扒点东西,之后刷刷sobb上百度美团快手的日常实习,流程都比较快轮次也少,别给自己太大压力,一步一步来,先不用想着暑期,转正,秋招那些事情,另外如果可能的话可以关注下面试时候的形象,穿搭,环境这些,其实实习主要就是看个眼缘,看着好看声音好听其实加分不少..八股这些不要死记硬背,挨个拿去问问chatgpt,这个东西做出来是为了解决什么问题,有啥效果,自己有想法有个模糊的概念就可以了,人家也知道你是学生,实习生没有什么kpi,放你去面都是希望能把你招进去的,场景题算法题没做过你可以边试着写边跟面试官说你的想法思路,也可以直说没见过让他们给你提示,反正最后都是与或非顺序分支循环存取值那套。总之建议是别为了秋招..出去旅旅游放松放松,少投几家少背八股多写写代码
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务