求鏈式線性表的倒數第K項 (20 分)
阿新 • • 發佈:2018-12-23
7-118 求鏈式線性表的倒數第K項 (20 分)
給定一系列正整數,請設計一個儘可能高效的演算法,查詢倒數第K個位置上的數字。
輸入格式:
輸入首先給出一個正整數K,隨後是若干正整數,最後以一個負整數表示結尾(該負數不算在序列內,不要處理)。
輸出格式:
輸出倒數第K個位置上的資料。如果這個位置不存在,輸出錯誤資訊NULL
。
輸入樣例:
4 1 2 3 4 5 6 7 8 9 0 -1
輸出樣例:
7
解析:
有一個樣例超時過不了,其他的過了
大體思路就是把要查詢的那個陣列倒過來正著找,也可以直接倒著找,總之要用STLvector
#include <iostream> #include <bits/stdc++.h> using namespace std; int main() { vector<int> ss; int n; scanf("%d ",&n); int t,i; int count=0; while(scanf("%d",&t)) { if(t!=-1) { ss.push_back(t); count++; } else break; } //reverse(ss.begin()+1,ss.end()); for(i = ss.size();i >= 0;i--) { if(i==ss.size()-n) cout<<ss[i]; } if(n>count) cout<<"NULL"<<endl; }
再給一個全對的網上找的
#include<stdio.h> #include<iostream> #include<string.h> using namespace std; int main() { int k , cnt=0,tmp,flag=0,found = 0; cin>>k; int* num=(int*)malloc(sizeof(int)*k); //只存k個正整數 while(1) { scanf("%d",&tmp); if(tmp<0) //tmp為-1退出迴圈 break; num[cnt++]=tmp; if(!found&&cnt>=k) found=1; cnt%=k; } if(found==0) printf("NULL"); else printf("%d",num[cnt]);//輸出位於最後輸入的元素的下一個元素,因為最後輸入的元素就是倒數第一個元素,cnt++後指向它的下一個元素,只存了k個,所以它的下一個就是倒數第k個了 return 0; }