文章

33

粉丝

253

获赞

1

访问

15.6k

头像
2009年计算机学科专业基础综合试题 - 第42题回答
数据结构
发布于2025年10月13日 14:49
阅读数 51

 1.   循环遍历整个链表根据 位置k找到要访问的节点即可 

 2.用一个指针先遍历整个链表求出链表的长度   倒数第k个位置就是n-k+1 (假设链表长度是n)

 然后在设立一个循环找寻位置即可 


typedef struct Node {
    int data;          // 节点数据域
    struct Node *next; // 指向下一个节点的指针
} Node, *LinkList;

// 2. 查找倒数第k个节点的函数(两次遍历法)
int findKthFromTail(LinkList list, int k, int *outData) {
    // 参数说明:list为链表头指针(含表头结点),k为目标倒数位置,outData存储找到的data(输出参数)
    // 返回值:1=成功,0=失败

    // 步骤1:合法性校验(空链表、无数据节点或k无效)
    if (list == NULL || list->next == NULL || k <= 0) {
        return 0;
    }

    // 步骤2:第一次遍历——统计链表数据节点总长度
    int len = 0;                  // 链表数据节点总数
    Node *p = list->next;         // p指向第一个数据节点,跳过表头
    while (p != NULL) {
        len++;                    // 每遍历一个节点,长度加1
        p = p->next;
    }

    // 步骤3:判断k是否超出链表长度(无对应节点)
    if (k > len) {
        return 0;
    }

    // 步骤4:计算正数位置,第二次遍历——定位倒数第k个节点
    int targetPos = len - k + 1;  // 倒数第k个节点对应的正数位置
    p = l...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发