输出单链表倒数第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;
}
记录一些数据结构学习过程的习题代码,便于日后查看。如有错误,欢迎交流指正。
标签:Node,单链,int,元素,next,数据结构,倒数第 From: https://www.cnblogs.com/zhuannnn/p/17556169.html