数据结构练习笔记——输出单链表倒数第k个元素
输出单链表倒数第k个元素
【问题描述】已知带头结点的非空单链表中存放着若干整数,请找出该链表中倒数第k个元素。
【输入形式】第一行:单链表中元素个数m,第二行:单链表中的m个整数,第三行:k值
【输出形式】倒数第k个元素的值(不存在倒数第k个元素输出"no")
【样例1】
输入 :
5
13 24 50 33 56
2
输出: 33
【样例2】
输入:
5
13 24 50 33 56
6
输出:no
#include  <iostream>
using  namespace  std;
struct  Node  {
	int  data;
	Node  *next;
};
typedef  Node  *LinkList;
void  createList(LinkList  &L,int  n)  {
	Node  *p,*r;
	L=new  Node;
	L->next=NULL;
	r=L;
	for(int  i=1;  i<=n;  i++)  {
		p=new  Node;
		cin>>p->data;
		r->next=p;
		r=p;
	}
	r->next=NULL;
}
void  printList(LinkList  L)  {
	Node  *p;
	p=L->next;
	while(p)  {
		cout<<p->data<<"  ";
		p=p->next;
	}
	cout<<endl;
}
//------找单链表中倒数第k个元素-------
Node* getElem(LinkList L,int k) {
	LinkList p=L;
	int length=0;
	while(p->next) {
		length++;
		p=p->next;
	}      //获取单链表的长度
	p=L;
	if(length-k<0) return NULL;//不存在倒数第k个元素
	for(int i=0; i<length-k+1; i++)//倒数第k个元素,即为顺数的length-k+1个元素
		p=p->next;
	return p;
}
//--------------------------------
int  main()  {
	LinkList  L;
	int  m,k;
	cin>>m;//单链表中元素个数
	createList(L,m);//尾插入法创建带头节点的单链表
	cin>>k;
	Node  *p=getElem(L,k);//找单链表中倒数第k个元素
	if(p)
		cout<<p->data;
	else
		cout<<"no";
	return  0;
}
记录一些数据结构学习过程的习题代码,便于日后查看。如有错误,欢迎交流指正。
                    
                
                
            
        
浙公网安备 33010602011771号