【PTA数据结构 | C语言版】返回单链表 list 中第 i 个元素值

本专栏持续输出数据结构题目集,欢迎订阅。

文章目录

题目

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

输入格式:

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

输出格式:

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

输入样例 1:

5

1 2 3 4 5

4

输出样例 1:

2

输入样例 2:

5

1 2 3 4 5

0

输出样例 2:

-1

代码

c 复制代码
#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构
typedef struct Node {
    int data;
    struct Node* next;
} Node;

// 创建新节点
Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

// 获取链表第i个元素的值
int getElement(Node* head, int i) {
    if (i < 1) return -1;  // 位序i必须从1开始
    Node* current = head;
    int count = 1;
    while (current != NULL && count < i) {
        current = current->next;
        count++;
    }
    if (current == NULL) return -1;  // 元素不存在
    return current->data;
}

int main() {
    int n, data, i;
    Node* head = NULL;  // 初始为空链表

    // 读取整数个数n
    scanf("%d", &n);

    // 顺次插入n个整数到表头
    for (int j = 0; j < n; j++) {
        scanf("%d", &data);
        Node* newNode = createNode(data);
        newNode->next = head;  // 新节点指向当前头节点
        head = newNode;        // 更新头节点为新节点
    }

    // 读取要查找的位序i
    scanf("%d", &i);

    // 输出第i个元素的值
    printf("%d\n", getElement(head, i));

    return 0;
}    
相关推荐
稚南城才子,乌衣巷风流5 小时前
动态开点:原理、实现与应用场景
数据结构·算法
yyds_yyd_100865 小时前
1464. 数组中两元素的最大乘积(2026.07.27)
数据结构·c++·算法·leetcode
躺柒8 小时前
读半导体简史08大型机
linux·服务器·c语言·数据库·unix·ibm
十月的皮皮9 小时前
STM32从零到量产开发:四路继电器工业控制模块开发— 继电器模块bsp_di.h与 bsp_di.c文件
c语言·stm32·stm32cubemx·hal库
wuyk55510 小时前
67.嵌入式C语言进阶:结构体指针实战指南——STM32外设、传感器数据访问的高效技巧
c语言·开发语言·stm32·单片机
我不管我就要叫小猪10 小时前
C/C++----命名空间
c语言·开发语言·c++
白白白小纯11 小时前
算法篇—返回倒数第k个节点
c语言·数据结构·算法·leetcode
无忧.芙桃11 小时前
数据结构之堆
c语言·数据结构·c++·算法·
小蒋学算法12 小时前
算法-删除元素后最大固定点数目-典型最长增长序列算法
数据结构·算法
2301_7779983412 小时前
Linux线程控制——从线程创建到线程分离(第三部分:线程等待 pthread_join)
linux·运维·服务器·c语言·c++