求链式线性表的倒数第K项
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式:
输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL
。
输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例:
7
思路:该题题面很好理解,第一考虑是使用数组做,但出现了多个 段错误 测试点
段错误
-
这个错误一般在程序使用
数组
这种结构才会出现错误,如果定义数组长度太小,没有达到题目要求最大值的情况。
比如这个题目:
这里有提到字符串长度不超过10000,这个时候你定义数组就要超过这个值,否则引起段错误或答案错误。比如你可以定义char str[10010];
-
scanf没有加
&
-
野指针。指针没有指向。如
int *p;
printf("%d", *p1);
主要的错误原因是数组无论怎么设长度都判断为太小
然后考虑常规的链表做法
代码:
#include<bits/stdc++.h>
using namespace std;
typedef struct Node
{
int data;
Node *next;
} Node,*List;
void CreatList(List &s) //创建链表(输入数值)
{
Node *p,*q;
s=(Node*)malloc(sizeof(Node));
q=s;
int x;
while(scanf("%d",&x)&&x>=0)
{
p = (Node *)malloc(sizeof(Node)); // 生成新结点
p->data = x;
p->next = s->next; // 插入到表头
s->next = p;
}
}
int main()
{
int k;
scanf("%d",&k);
List L;
CreatList(L);
for(int i = 0;i<k;i++) //开始读数
{
L = L->next;
}
if(L->data!=NULL)
printf("%d",L->data);
else
printf("NULL");
return 0;
}
原文链接: https://www.cnblogs.com/elegantcloud/p/13709077.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/203126
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!