第一个数是k,后面的依次是链表元素
【输出形式】
找到的值
【样例输入】
1 2 3 4 5 6 7 8 9 0
【样例输出】
0
【样例说明】
倒数第1个数是0
要求:
不得求出数组长度
供参考:
#include <stdio.h>
#include <malloc.h>
typedef struct lianbiao {
int data;
struct lianbiao* next;
}*List;
List creatnode(List L);
void search(List L, int k);
int main() {
int k;
scanf("%d", &k);
List head; //不带头结点
head = creatnode(head);
search(head, k);
return 0;
}
List creatnode(List L) {
L = NULL;
List p, tail = NULL;
while (1) {
p = (List)malloc(sizeof(struct lianbiao));
scanf("%d", &p->data);
if (p->data == -1) break; // 输入 -1 结束链表元素输入
p->next = NULL;
if (L == NULL)L = p;
else tail->next = p;
tail = p;
}
return L;
}
void search(List L, int k)
{
if (L == NULL || k < 1) {
printf("-1");
return;
}
List p = L, pr = L;
int cnt = 0;
while (p) {
if (cnt > k - 1)
pr = pr->next;
cnt++;
p = p->next;
}
if (cnt < k)
printf("-1");
else
printf("%d", pr->data);
}
需要把链表遍历一遍,遍历过程把每一个元素放入栈中,遍历完,取倒数第几个,就弹出几次,最后一个弹出的元素就是需要的,如果不够弹,就返回-1
你给的代码对吗?跑跑试试了吗?