数据结构每日一题day10(链表)★★★★★

题目描述:有一个带头结点的单链表L,请设计一个算法查找其第i个结点位置,若存在则返回指向该给点的指针,若不存在则返回NULL。

算法思想:

输入检查:若链表为空(仅有头结点)或i ≤ 0,直接返回NULL。

遍历链表:从头结点后的第一个结点开始,依次向后遍历,直到找到第i个结点或链表结束。

返回结果:若找到第i个结点,返回指向该结点的指针;否则返回NULL。

复杂度分析:

时间复杂度:O(n)空间复杂度:O(1)

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

typedef struct LNode {
    int data;               // 数据域
    struct LNode *next;     // 指针域
} LNode, *LinkList;

// 查找第i个结点
LNode* GetElem(LinkList L, int i) {
    if (L == NULL || i <= 0) {
        return NULL;        // 输入不合法
    }
    
    LNode *p = L->next;     // p指向第一个实际结点(跳过头结点)
    int count = 1;          // 计数器从1开始
    
    while (p != NULL && count < i) {
        p = p->next;        // 指针后移
        count++;            // 计数器递增
    }
    
    return p;               // 若找到则返回p,否则返回NULL
}
相关推荐
叩码以求索2 小时前
浅谈:前序遍历反转法求解N叉树的后序遍历
算法
北风toto3 小时前
中缀、前缀、后缀表达式
算法·软件设计师
听取WA声一片(无恶意)3 小时前
CSP-J/CSP-S 深度优先搜索(DFS)完全讲义
c++·算法·深度优先
码流怪侠4 小时前
2026年8月GitHub热榜深度拆解:Agent Skills席卷开源圈,一个“技能包“收割5万星
算法·程序员·github
hold?fish:palm4 小时前
30 两两交换链表中的节点
数据结构·算法·链表
Nil2084 小时前
leetcode 98验证二叉搜索树
算法·leetcode·职场和发展
不正经学生4 小时前
C语言结构体:自定义数据类型,让变量打包出行
java·c语言·开发语言·数据结构·算法
cxr8285 小时前
数学的本质:关系、模式与不变量的结构世界
人工智能·算法·机器学习
初夏睡觉6 小时前
原创题目 - 空壳恋爱
c++·算法·dp·oi·信息学·原创题目·值得挑战的题目
Buke..6 小时前
【APP 逆向】哔哩哔哩 sign 参数逆向(下):OLLVM 混淆还原 sign 算法
java·javascript·爬虫·python·算法