Bailanking Jerry 2022-12-16 17:49 采纳率: 0%
浏览 110

c语言链表oj时间超限

在学校平台上有道题
题目描述
输入一个正整数序列,遇负数时停止,建立一个线性链表存储读入的数据,然后从键盘读入一数据x,在该链表中删除比x大的数据后输出。
输入
单组测试数据
第一行输入很多个整数,最后一个是负数,其他都是正数
第二行输入一个整数x
输出
按照输入的顺序,输出删除后链表的值
样例输入 Copy
1 2 3 4 5 -1
3
样例输出 Copy
1 2 3

#include<stdio.h>
#include<stdlib.h>
typedef struct line 
{
    int num;
    struct line *next;
    
}Line;
void inside(Line*head,int num)//尾插 
{
    Line*news=(Line*)malloc(sizeof(Line));
    news->num=num;
    news->next=NULL;
    Line*q;
    q=head;
    while(q->next!=NULL)
    {
        q=q->next;    
    }
    q->next=news;
} 
int main(void)
{
    Line*head=(Line*)malloc(sizeof(Line));
    head->next=NULL;
    Line*p;
    p=head;
    int i,x;
    scanf("%d",&i);
    while(i>=0)
    {
        inside(head,i);
        scanf("%d",&i);
    }
    scanf("%d",&x);
    for(;p!=NULL;p=p->next)
    {
        if((p->num)<=x) 
        {
            printf("%d ",p->num);
        }
    } 
    printf("\n");
    return 0; 
}


这是我的做法本机运行没问题,但是交上去就是时间超限,是什么问题
  • 写回答

2条回答 默认 最新

  • m0_57781768 2022-12-16 19:15
    关注

    有一些潜在的问题可能会导致您的代码超过时间限制:

    最可能的问题是您正在使用线性搜索算法来查找链表中小于或等于 的元素x。这意味着你的算法的时间复杂度是 O(n),其中 n 是链表中元素的数量。如果链接列表非常大,这可能会导致超过时间限制。

    另一个问题可能是在函数中使用malloc和使用动态内存分配。这些函数可能相对较慢,并且会增加程序的开销,尤其是在频繁调用它们的情况下。freeinside

    使用scanf和printf还会增加程序的开销,尤其是在频繁调用它们的情况下。您可能需要考虑使用更快的输入/输出函数,例如fread和fwrite。

    为了优化代码的性能,您可能需要考虑使用更快的算法来搜索链表,最大限度地减少动态内存分配的使用并优化您的输入/输出操作。如果更适合您的需要,您可能还想考虑使用不同的数据结构,例如数组或平衡树。

    评论
    1人已打赏

报告相同问题?

问题事件

  • 创建了问题 12月16日

悬赏问题

  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误
  • ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。