5-19 求链式线性表的倒数第K项 (20分)
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式:
输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL
。
输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例:
7
1 #include <stdio.h> 2 3 typedef struct Node 4 { 5 int data; 6 struct Node * next; 7 }Node, * linkList; 8 9 10 void InitList(linkList *p) 11 { 12 (*p) = (linkList)malloc(sizeof(Node)); 13 (*p)->next = NULL; 14 } 15 16 void creat(linkList L) 17 { 18 Node *s; 19 int num, flag = 1; 20 while(flag) 21 { 22 scanf("%d", &num); 23 if(num >= 0) 24 { 25 s = (linkList)malloc(sizeof(Node)); 26 s->data = num; 27 s->next = L->next; 28 L->next = s; 29 } 30 else 31 { 32 flag = 0; 33 } 34 } 35 } 36 37 void printNum(linkList L, int n) 38 { 39 Node *p = L->next; 40 int i = 0; 41 while(p != NULL && i < n - 1) 42 { 43 p = p->next; 44 i++; 45 } 46 if(p != NULL) 47 printf("%d\n", p->data); 48 else 49 printf("NULL\n"); 50 51 } 52 53 int main() 54 { 55 Node *p; 56 int n; 57 scanf("%d", &n); 58 InitList(&p); 59 creat(p); 60 printNum(p, n); 61 return 0; 62 }