《数据结构实验指导-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 步
输出该结点的值
结束

相关推荐
傻啦嘿哟2 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670792 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
Dola_Zou2 小时前
工厂智能排产软件算法保护与按产线计费实战
算法·自动化·软件工程·软件加密
李少兄3 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
码匠许师傅3 小时前
【设计模式精讲】29.行为型模式总结与对比(Behavioral Patterns Summary)
c++·设计模式·uml
Seoyoneh4 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
啦啦啦啦啦zzzz4 小时前
Logger的组装(c++20)
c++·算法·c++20
Tangyuewei4 小时前
Java 写 Agent:模型只是组件
java·开发语言
小玮看世界5 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
尾善爱看海5 小时前
前端算法与手写题集
前端·算法