首页 > 解决方案 > 在 C 中超出时间限制

问题描述

我编写了在链表中插入元素的代码,它工作正常。然后我编写了在给定大小的组中反转链表的代码。我的问题是我的代码执行时间过长,因为我想优化它代码。

例如:

输入

8  //number of elements

1 2 2 4 5 6 7 8  //elements

4  //position to reverse the list elements

输出

4 2 2 1 8 7 6 5
struct node *reverse (struct node *head, int k)
{ 
    int count=0,i=0,j=0,a[1000],start=0,end;
    struct node *temp=head;
    struct node *t=head;
    struct node *tt=head;
    while(temp!=NULL)
    {
        temp=temp->next;
        count++;
    }
    while(count!=0)
    {
    while((k--)&&(t!=NULL))
    {
        a[i++]=t->data;
        t=t->next;
    }
    end=i-1;
    while(start<end)
    {
       int temp=a[start];
       a[start]=a[end];
       a[end]=temp;
       start++;
       end--;
    }
    while(tt->next!=t)
    {
        tt->data=a[j];
        j++;
        tt=tt->next;
    }
    tt->data=a[j];
    count=count-k;
    i=0;
    j=0;
    }
    return head;
}

标签: c

解决方案


所需的代码实际上是 6!行长

这里有我的例子

#include <stdio.h>

void reverse(int *first, int *last)
{
    int tmp;

    while(first < last)
    {
        tmp = *first;
        *first++ = *last;
        *last-- = tmp;
    }
}


void reverseFromPos(int *arr, size_t len, size_t pos)
{
    reverse(&arr[0], &arr[pos - 1]);
    reverse(&arr[pos], &arr[len -1]);
}

int main()
{
    int arr[] = {1,2,3,4,5,6,7,8, 9};
    size_t len;

    reverseFromPos(arr, len =sizeof(arr) / sizeof(arr[0]), 4);
    for(size_t index = 0; index < len; index++)
        printf("%d ", arr[index]);
    printf("\n");

    return 0;
}

推荐阅读