查找链表中倒数第k个结点

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

posted @ 2011-02-08 20:09  akawhy  阅读(1859)  评论(0编辑  收藏  举报