卡码网14 链表的基本操作2

链表的基础操作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
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>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<data<

你可能感兴趣的:(c++基础学习,链表,算法,数据结构)