19079 输出链表倒数第K个元素
时间限制:1000MS 代码长度限制:10KB
提交次数:0 通过次数:0
题型: 填空题 语言: 不限定
Description
输入一个长度为 n 的链表,设链表中的元素的值为 ai ,输出该链表中倒数第k个节点。
如果该链表长度小于k,输出-1。
#include <iostream>//C++
using namespace std;
struct LNode
{
int data;
LNode * next;
};
void createList(LNode * &L,int n)
{/**< 尾插法创建单链表 */
LNode *r, *p;
r=L=new LNode;/**< 创建头结点 */
L->next=NULL;
for(int i=1;i<=n;i++)
{
p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
}
void trv(LNode * L)
{ /**< 一个简单的链表遍历函数,供编程过程中测试使用 */
L=L->next;
while(L)
{
cout<<L->data<<' ';
L=L->next;
}
}
int getK(LNode * L,int k)
{
_______________________
}
int main()
{
int n,k;
LNode *L;
cin>>n>>k;
createList(L,n);
//trv(L);
cout<<getK(L,k);
return 0;
}
输入格式
第一行两个整数,分别为n和k。
第二行n个整数。
输出格式
倒数第k个元素,如果不存在,输出-1。
输入样例
5 2
1 2 3 4 5
输出样例
4
//定义快慢指针,先让快指针遍历k个数
//然后快慢指针一起走,当快指针遍历完时,慢指针即答案
LNode* l = L->next, *r = L->next;
while (k && l != NULL) {
l = l->next;
k--;
}
while (l != NULL) {
l = l->next;
r = r->next;
}
if (k > 0)return -1;
else return r->data;
//return k > 0 ? -1 : r->data;