/*
前面一个学习了代码的扩展性 用函数指针。
这本书其实一直在强调代码的鲁棒性 也就是健壮性
主要是对输入非法数据的处理
这里的鲁棒性 主要体现在三个方面
1 输入空指针怎么办
2 输入k小于等与0.
3 输入的k比链表长度小
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct Node
{
int data;
Node * next;
Node(int n){data=n;}
};
Node * findKth(Node * head, int k)
{
if(head==NULL || k<=0)
return NULL;
Node * p1=head,*p2=head;
int t=k-1;
while(t--)
{
if(p1->next!=NULL)
p1=p1->next;
else
return NULL;
}
while(p1->next!=NULL)
{
p1=p1->next;
p2=p2->next;
}
return p2;
}
int main()
{
int N;
while(scanf("%d",&N)!=EOF)
{
Node * head=new Node(1);
int n;
Node *p =head;
for(int i=0;i<N;++i)
{
cin>>n;
p->next=new Node(n);
p=p->next;
}
p=findKth(head,3);
cout<<1<<endl;
if(p!=NULL)
cout<<p->data<<endl;
else
cout<<"eror input\n";
}
return 0;
}