7-19 求链式线性表的倒数第K项(20 分)(单链表定义与尾插法)

给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。

输入格式:

输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。

输出格式:

输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL

输入样例:

4 1 2 3 4 5 6 7 8 9 0 -1

输出样例:

7

解题思路:寻找倒数第K项,这里所用的方法是定义两个指针,让第一个指针先走k步,然后两个指针一起移动,第一个指针移到末尾的时候,第二个指针就到了倒数第K个位置,输出第二个指针的值即可。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 typedef struct LNode{
 5     int data;
 6     struct LNode *next;
 7 }LNode,*LinkList;
 8 
 9 int main()
10 {
11     int temp;
12     int k,cnt=0;
13     LinkList L;
14     L = (LinkList)malloc( sizeof ( struct LNode));
15     LNode *s=L,*r=L,*p;
16 
17     scanf("%d",&k);
18     int f=k;   //保护k的值
19     while(1){
20         scanf("%d",&temp);
21         if( temp<0 ){
22             break;
23         }
24         else{
25             p=(LNode *)malloc(sizeof(LNode));
26             p->data = temp;  
27             r->next = p;  
28             r = p;
29             k--;
30             cnt++;
31             if( k<1){
32                 s= s->next;
33             }
34         }
35     }
36     if( f>cnt){
37         printf("NULL");
38     }
39     else printf("%d",s->data);
40 
41      return 0;
42 }

 

转载于:https://www.cnblogs.com/yuxiaoba/p/8370700.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值