Day7 链表的基础操作II -卡码网C++基础课

题目链接:链表的基础操作II

题目描述

请编写一个程序,实现以下操作:

构建一个单向链表,链表中包含一组整数数据,输出链表中的第 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.
点击查看代码
#include <iostream>
using namespace std;

struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};

int main() {
int n, k, val, m;
cin >> n >> k;
ListNode *dummyHead = new ListNode(0);
ListNode *cur = dummyHead;
while (n--) {
  cin >> val;
  ListNode *newNode = new ListNode(val);
  cur->next = newNode;
  cur = cur->next;
}
while (k--) {
  cur = dummyHead;
  cin >> m;
  while (m--) {
    if (cur != nullptr)
      cur = cur->next;
    else
      break; //要有break;不然会超时
  }
  if (cur == nullptr || cur == dummyHead) {
    cout << "Output position out of bounds." << endl;
  } else
    cout << cur->val << endl;
}
return 0;
}
小结

题目思路

先构建链表结构体
再根据第一行数字,初始化链表
再根据第二行数字,遍历链表
遍历通过 cur 指针实现,从虚拟头结点出发,遍历需判断是否遍历到空指针,若是需跳出循环,避免超时
最后判断 cur 位置是否合法,如指向空或虚拟头结点则不合法
posted @ 2025-12-20 19:57  afterday  阅读(1)  评论(0)    收藏  举报