/* 前面一个学习了代码的扩展性 用函数指针。 这本书其实一直在强调代码的鲁棒性 也就是健壮性 主要是对输入非法数据的处理 这里的鲁棒性 主要体现在三个方面 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; }