题目:输入一个单向链表,输出该链表中倒数第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; }