《数据结构实验指导-C++语言版》 返回单链表 list 中第 i 个元素值

题目描述

请编写程序,将 nnn 个整数顺次插入一个初始为空的单链表的表头。对任一给定的位序 iii(从 1 开始),输出链表中第 iii 个元素的值。

输入格式:

输入首先在第一行给出非负整数 nnn(≤20\le 20≤20);随后一行给出 nnn 个 int 范围内的正整数,数字间以空格分隔。最后一行给出位序 iii,为 int 范围内的非负整数。

输出格式:

在一行中输出链表中第 iii 个元素的值。如果这个元素不存在,则输出 -1。

输入样例:

复制代码
5
1 2 3 4 5
4

输出样例:

复制代码
2

输入样例:

复制代码
5
1 2 3 4 5
0

输出样例:

复制代码
-1

解题思路

本题考察单链表的建立与按位序取值操作。题目要求将 nnn 个整数"顺次插入表头",即每次都把新读入的整数插到链表头部(头插法)。头插法建立完成后,链表中结点的顺序恰好是输入序列的逆序:最先插入的元素在链尾,最后插入的元素在表头。

位序 iii 从 1 开始计数,因此第 iii 个元素就是从头结点开始沿 next 指针前进 i−1i-1i−1 步后所在的结点。由于单链表不支持随机访问,只能通过指针逐结点移动来定位。

时间复杂度:建立链表为 O(n)O(n)O(n),按位序查找最多移动 iii 次,为 O(n)O(n)O(n),总体 O(n)O(n)O(n)。

空间复杂度:链表结点数为 nnn,为 O(n)O(n)O(n)。

代码流程说明

  1. 定义 Node 结构体,包含数据域 data、指针域 next,并提供构造函数 Node(int d)next 初始化为 nullptr
  2. main 函数中先读入整数个数 n,将链表头指针 head 初始化为空。
  3. 循环 n 次:每次读入一个整数 vnew 出一个新结点 p,采用头插法将其插入链表(p->next = head; head = p;)。
  4. 读入位序 i
  5. i < 1,位序不合法,直接输出 -1 并结束程序。
  6. 用指针 p 指向表头,循环 k 从 1 到 i-1p 非空,让 p = p->next,将指针移动到第 iii 个结点。
  7. 若移动后 p 为空(说明第 iii 个结点不存在,超出表长),输出 -1;否则输出 p->data

代码实现

cpp 复制代码
#include <iostream>
using namespace std;

struct Node {
    int data;
    Node* next;
    Node(int d) : data(d), next(nullptr) {}
};

int main() {
    int n, i;
    cin >> n;
    Node* head = nullptr;
    for (int k = 0; k < n; ++k) {
        int v;
        cin >> v;
        Node* p = new Node(v);
        p->next = head;
        head = p;
    }
    cin >> i;
    // 依次头插后链表为输入序列的逆序,第 i 个元素即从表头数第 i 个
    if (i < 1) { cout << -1 << endl; return 0; }
    Node* p = head;
    for (int k = 1; k < i && p; ++k) p = p->next;
    if (!p) cout << -1 << endl;
    else cout << p->data << endl;
    return 0;
}

代码流程图

#mermaid-svg-Zbv9MsyeWSUfqhbM{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Zbv9MsyeWSUfqhbM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Zbv9MsyeWSUfqhbM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Zbv9MsyeWSUfqhbM .error-icon{fill:#552222;}#mermaid-svg-Zbv9MsyeWSUfqhbM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Zbv9MsyeWSUfqhbM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Zbv9MsyeWSUfqhbM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Zbv9MsyeWSUfqhbM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Zbv9MsyeWSUfqhbM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Zbv9MsyeWSUfqhbM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Zbv9MsyeWSUfqhbM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Zbv9MsyeWSUfqhbM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Zbv9MsyeWSUfqhbM .marker.cross{stroke:#333333;}#mermaid-svg-Zbv9MsyeWSUfqhbM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Zbv9MsyeWSUfqhbM p{margin:0;}#mermaid-svg-Zbv9MsyeWSUfqhbM .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Zbv9MsyeWSUfqhbM .cluster-label text{fill:#333;}#mermaid-svg-Zbv9MsyeWSUfqhbM .cluster-label span{color:#333;}#mermaid-svg-Zbv9MsyeWSUfqhbM .cluster-label span p{background-color:transparent;}#mermaid-svg-Zbv9MsyeWSUfqhbM .label text,#mermaid-svg-Zbv9MsyeWSUfqhbM span{fill:#333;color:#333;}#mermaid-svg-Zbv9MsyeWSUfqhbM .node rect,#mermaid-svg-Zbv9MsyeWSUfqhbM .node circle,#mermaid-svg-Zbv9MsyeWSUfqhbM .node ellipse,#mermaid-svg-Zbv9MsyeWSUfqhbM .node polygon,#mermaid-svg-Zbv9MsyeWSUfqhbM .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Zbv9MsyeWSUfqhbM .rough-node .label text,#mermaid-svg-Zbv9MsyeWSUfqhbM .node .label text,#mermaid-svg-Zbv9MsyeWSUfqhbM .image-shape .label,#mermaid-svg-Zbv9MsyeWSUfqhbM .icon-shape .label{text-anchor:middle;}#mermaid-svg-Zbv9MsyeWSUfqhbM .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Zbv9MsyeWSUfqhbM .rough-node .label,#mermaid-svg-Zbv9MsyeWSUfqhbM .node .label,#mermaid-svg-Zbv9MsyeWSUfqhbM .image-shape .label,#mermaid-svg-Zbv9MsyeWSUfqhbM .icon-shape .label{text-align:center;}#mermaid-svg-Zbv9MsyeWSUfqhbM .node.clickable{cursor:pointer;}#mermaid-svg-Zbv9MsyeWSUfqhbM .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Zbv9MsyeWSUfqhbM .arrowheadPath{fill:#333333;}#mermaid-svg-Zbv9MsyeWSUfqhbM .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Zbv9MsyeWSUfqhbM .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Zbv9MsyeWSUfqhbM .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Zbv9MsyeWSUfqhbM .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Zbv9MsyeWSUfqhbM .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Zbv9MsyeWSUfqhbM .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Zbv9MsyeWSUfqhbM .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Zbv9MsyeWSUfqhbM .cluster text{fill:#333;}#mermaid-svg-Zbv9MsyeWSUfqhbM .cluster span{color:#333;}#mermaid-svg-Zbv9MsyeWSUfqhbM div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Zbv9MsyeWSUfqhbM .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Zbv9MsyeWSUfqhbM rect.text{fill:none;stroke-width:0;}#mermaid-svg-Zbv9MsyeWSUfqhbM .icon-shape,#mermaid-svg-Zbv9MsyeWSUfqhbM .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Zbv9MsyeWSUfqhbM .icon-shape p,#mermaid-svg-Zbv9MsyeWSUfqhbM .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Zbv9MsyeWSUfqhbM .icon-shape .label rect,#mermaid-svg-Zbv9MsyeWSUfqhbM .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Zbv9MsyeWSUfqhbM .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Zbv9MsyeWSUfqhbM .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Zbv9MsyeWSUfqhbM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是







开始
读入 n
初始化 head 为空
是否还有 k < n 个数未读入
读入 v
创建新结点 p
p->next = head
head = p
读入位序 i
i < 1
输出 -1
结束
p 指向表头
k 从 1 到 i-1 且 p 非空
p = p->next
p 是否为空
输出 -1
输出 p->data

解题流程图

#mermaid-svg-RGeEhmoISO6UYG42{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RGeEhmoISO6UYG42 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RGeEhmoISO6UYG42 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RGeEhmoISO6UYG42 .error-icon{fill:#552222;}#mermaid-svg-RGeEhmoISO6UYG42 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RGeEhmoISO6UYG42 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RGeEhmoISO6UYG42 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RGeEhmoISO6UYG42 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RGeEhmoISO6UYG42 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RGeEhmoISO6UYG42 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RGeEhmoISO6UYG42 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RGeEhmoISO6UYG42 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RGeEhmoISO6UYG42 .marker.cross{stroke:#333333;}#mermaid-svg-RGeEhmoISO6UYG42 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RGeEhmoISO6UYG42 p{margin:0;}#mermaid-svg-RGeEhmoISO6UYG42 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RGeEhmoISO6UYG42 .cluster-label text{fill:#333;}#mermaid-svg-RGeEhmoISO6UYG42 .cluster-label span{color:#333;}#mermaid-svg-RGeEhmoISO6UYG42 .cluster-label span p{background-color:transparent;}#mermaid-svg-RGeEhmoISO6UYG42 .label text,#mermaid-svg-RGeEhmoISO6UYG42 span{fill:#333;color:#333;}#mermaid-svg-RGeEhmoISO6UYG42 .node rect,#mermaid-svg-RGeEhmoISO6UYG42 .node circle,#mermaid-svg-RGeEhmoISO6UYG42 .node ellipse,#mermaid-svg-RGeEhmoISO6UYG42 .node polygon,#mermaid-svg-RGeEhmoISO6UYG42 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RGeEhmoISO6UYG42 .rough-node .label text,#mermaid-svg-RGeEhmoISO6UYG42 .node .label text,#mermaid-svg-RGeEhmoISO6UYG42 .image-shape .label,#mermaid-svg-RGeEhmoISO6UYG42 .icon-shape .label{text-anchor:middle;}#mermaid-svg-RGeEhmoISO6UYG42 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RGeEhmoISO6UYG42 .rough-node .label,#mermaid-svg-RGeEhmoISO6UYG42 .node .label,#mermaid-svg-RGeEhmoISO6UYG42 .image-shape .label,#mermaid-svg-RGeEhmoISO6UYG42 .icon-shape .label{text-align:center;}#mermaid-svg-RGeEhmoISO6UYG42 .node.clickable{cursor:pointer;}#mermaid-svg-RGeEhmoISO6UYG42 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RGeEhmoISO6UYG42 .arrowheadPath{fill:#333333;}#mermaid-svg-RGeEhmoISO6UYG42 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RGeEhmoISO6UYG42 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RGeEhmoISO6UYG42 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RGeEhmoISO6UYG42 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RGeEhmoISO6UYG42 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RGeEhmoISO6UYG42 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RGeEhmoISO6UYG42 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RGeEhmoISO6UYG42 .cluster text{fill:#333;}#mermaid-svg-RGeEhmoISO6UYG42 .cluster span{color:#333;}#mermaid-svg-RGeEhmoISO6UYG42 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RGeEhmoISO6UYG42 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RGeEhmoISO6UYG42 rect.text{fill:none;stroke-width:0;}#mermaid-svg-RGeEhmoISO6UYG42 .icon-shape,#mermaid-svg-RGeEhmoISO6UYG42 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RGeEhmoISO6UYG42 .icon-shape p,#mermaid-svg-RGeEhmoISO6UYG42 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RGeEhmoISO6UYG42 .icon-shape .label rect,#mermaid-svg-RGeEhmoISO6UYG42 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RGeEhmoISO6UYG42 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RGeEhmoISO6UYG42 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RGeEhmoISO6UYG42 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否

读入 n 个整数
头插法依次建立单链表
读入位序 i
1 <= i <= 表长
输出 -1
从表头沿 next 指针前进 i-1 步
输出该结点的值
结束

相关推荐
法哥20122 小时前
用 C++ 控制 CMW100,到底在干什么?
开发语言·c++
QH139292318802 小时前
NVIDIA H200 H300服务器
运维·服务器·开发语言·网络·信息与通信
典典分享指南2 小时前
VS Code Git 工作树:解锁多分支并行开发新体验
算法·决策树·逻辑回归·启发式算法
OPEN-F2 小时前
Python进阶教程:单元测试与代码质量
开发语言·python·单元测试
阿里嘎多学长2 小时前
2026-08-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
其实防守也摸鱼2 小时前
Codex破局:前端组件秒级生成的技术文章大纲
开发语言·前端·人工智能·学习·安全·web安全
_Narcissus_2 小时前
枚举和模拟算法笔记
c语言·数据结构·c++·笔记·算法·模拟·枚举
Logintern092 小时前
装饰器和洋葱模式的区分
开发语言·python·架构
天疆说2 小时前
策略的进化:从随心所欲到稳健前行
算法
冻柠檬飞冰走茶3 小时前
《数据结构实验指导-C++语言版》 在顺序表 list 中查找元素 x
开发语言·数据结构·c++·算法·list