Waltershaijd 2023-04-11 18:40 采纳率: 0%
浏览 33

查找链表中元素的时候超时了怎么处理啊?

7-5 求链式线性表的倒数第K项
分数 20
作者 DS课程组
单位 浙江大学
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。

输入格式:
输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。

输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。

输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例:
7
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

#include<stdio.h>
#include<stdlib.h>
typedef struct list {
    int data;
    struct list* next;
}list;
int main() {
    list* p;
    list* head = (list*)malloc(sizeof(list));
    head->next = NULL;
    int k, data, c = 0;
    scanf("%d", &k);
    scanf("%d", &data);
    while (data != -1) {
        p = (list*)malloc(sizeof(list));
        p->data = data;
        p->next = head->next;
        head->next = p;
        scanf("%d", &data);
        c++;
    }
    p = (list*)malloc(sizeof(list));
    p = head->next;
    for (int i = 1; i <= c; i++) {
        if (i == k) {
            printf("%d\n", p->data);
        }

        p = p->next;
    }
    if (k > c) {
        printf("NULL");
        return 0;
    }

    return 0;
}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2023-04-11 21:43
    关注

    既然已经用头插法生成链表了,查找倒数第K个位置上的数字就成了顺数第k个数据了,题主的代码修改如下,改动处见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct list {
        int data;
        struct list* next;
    }list;
    int main() {
        list* p;
        list* head = (list*)malloc(sizeof(list));
        head->next = NULL;
        int k, data, c = 0;
        scanf("%d", &k);
        while (scanf("%d", &data) && data != -1) {  //修改
            p = (list*)malloc(sizeof(list));
            p->data = data;
            p->next = head->next;
            head->next = p;
            //scanf("%d", &data);  修改
            //c++; 多余
        }
        //p = (list*)malloc(sizeof(list));多余    修改
        p = head;               //p = head->next; 修改
        for (int i = 0; p && i < k; i++) { //(int i = 1; i <= c; i++) 修改
                                //if (i == k) {
                                //    printf("%d\n", p->data);
                                //}
    
            p = p->next;
        }
        if (p) //if (k > c) {  修改
            printf("%d", p->data);
        else
            printf("NULL");
        //return 0;        修改
        //}                修改
    
        return 0;
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月11日

悬赏问题

  • ¥15 android报错 brut.common.BrutException: could not exec (exit code = 1)
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择
  • ¥15 部分网页页面无法显示!
  • ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?