题目:输入一个单向链表,输出该链表中倒数第k个结点。如果该链表的头节点包含其链表的长度则很好做。本题假设没有,思路是设两个指针,两个指针相差k,当前面一个指针遍历到末尾时,后一个指针指向的就是所要求得的节点。
//输出链表中倒数第k个结点
#include<iostream>
using namespace std;
struct node{
int data;
node *next;
};
void create(node *&list){ //初始化,简单的将链表内容变为1到10
node *pre;
node *cur;
pre=new node;
pre->data=1;
pre->next=NULL;
list=pre;
for(int i=2;i<=10;i++){
cur=new node;
cur->data=i;
cur->next=NULL;
pre->next=cur;
pre=cur;
}
}
void print(node *list){
while(list){
cout<<list->data<<" ";
list=list->next;
}
cout<<endl;
}
void find(node *list,int k){
node *first=list; //前面一个指针
int cnt=0;
while(cnt++<k){ //向前移动k位
if(!first) {cout<<"error"<<endl;return;}
else first=first->next;
}
node *index=list; //后一个指针,此时first和index正好相差k位
while(first){ //当first遍历到末尾时index必是所要求的值
first=first->next;
index=index->next;
}
cout<<index->data<<endl;
return;
}
int main(void){
node *list;
create(list);
print(list);
find(list,10);
system("pause");
return 0;
}