链表的基础操作II
时间限制:1.000S 空间限制:128MB
题目描述
请编写一个程序,实现以下操作:
构建一个单向链表,链表中包含一组整数数据,输出链表中的第 m 个元素(m 从 1 开始计数)。
要求:
1. 使用自定义的链表数据结构
2. 提供一个 linkedList 类来管理链表,包含构建链表、输出链表元素以及输出第 m 个元素的方法
3. 在 main 函数中,创建一个包含一组整数数据的链表,然后输入 m,调用链表的方法输出第 m 个元素输入描述
第一行包含两个整数 n 和 k,n 表示需要构建的链表的长度,k 代表输入的 m 的个数。
接下来一行包含 n 个整数,表示链表中的元素。
接下来一行包含 k 个整数,表示输出链表中的第 m 个元素。
输出描述
测试数据输出占 k 行。
每行输出链表中的第 m 个元素。如果 m 位置不合法,则输出“Output position out of bounds.”。
输入示例
5 5
1 2 3 4 5
4 3 2 9 0
输出示例
4
3
2
Output position out of bounds.
Output position out of bounds.
思路:
这道题分为两部分,第一部分是输入,往链表中加n个数,首先想到的就是利用for循环遍历,每次更新一个新的元素节点,然后把头指针指向新的元素节点
第二部分是输出,他让输入k个数,一共有k轮,每一轮查找一个指定位置的元素,
k轮的话就是利用while(k--)循环k轮,然后每一轮,都需要查找指定位置的,如果找这个位置的节点,我们可以想到的是利用while(m--)就是从头节点的下一个节点依次遍历,遍历完就找到了,但是要注意越界的问题,// cur == NULL 表示 m 超出了链表长度 ,所以要在循环中增加一个判断条件,如果不为空就继续遍历,如果为空就说明到了链表中的最尾部,就应该跳出循环,
c++代码实现:
#include<iostream>
using namespace std;
typedef struct LinkedList{
int data;
struct LinkedList *next;//指向下一个节点的指针
LinkedList(int x):data(x),next(nullptr){}
}*L;
int main(){
int n,k;
int val;
cin>>n>>k;
L DummyheadNode=new LinkedList(0);
L cur=DummyheadNode;
for(int i=0;i<n;i++){
cin>>val;
L newNode=new LinkedList(val);
cur->next=newNode;
cur=newNode;
}
while(k--){
cur=DummyheadNode;
int m;
cin>>m;
while(m--){
if(cur!=NULL)
cur=cur->next;
else
break;
}
if(cur==NULL||cur==DummyheadNode){
cout << "Output position out of bounds." << endl;
}
else
cout<<cur->data<<endl;
}
}