描述
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。
链表结点定义如下:
struct ListNode { int m_nKey; ListNode* m_pNext; };
正常返回倒数第k个结点指针,异常返回空指针.
要求:
(1)正序构建链表;
(2)构建后要忘记链表长度。
数据范围:链表长度满足 1≤n≤1000 1≤n≤1000 , k≤n k≤n ,链表中数据满足 0≤val≤10000 0≤val≤10000
本题有多组样例输入。
输入描述:
输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值
输出描述:
输出一个整数
示例1
输入:
8 1 2 3 4 5 6 7 8 4
输出:
5
代码
#include<iostream>
using namespace std;
struct ListNode{
int data;
ListNode*next;
};
ListNode*FindkthToTail(ListNode*pHead,int k){
ListNode*fast=pHead;
ListNode*slow=pHead;
for(int i=0;i<k;i++){
if(fast!=NULL){
fast=fast->next;
}
else return slow=NULL;
}
while(fast!=NULL){
fast=fast->next;
slow=slow->next;
}
return slow;
}
int main(){
int n;
while(cin>>n){
int val;
cin>>val;
ListNode*head=new ListNode();
head->data=val;
ListNode*p=head;
for(int i=1;i<n;i++){
cin>>val;
ListNode*q=new ListNode();
q->data=val;
p->next=q;
p=p->next;
}
int k;
cin>>k;
if(k==0)cout<<0<<endl;
else{
p=FindkthToTail(head,k);
if(p!=NULL)cout<<p->data<<endl;
}
}
return 0;
}