Превышено ограничение по времени в C - PullRequest
0 голосов
/ 30 марта 2019

Я сделал код для вставки элементов в связанный список, он работает правильно. Затем я написал код для обратного связанного списка в группах заданного размера. Моя проблема в том, что мой код занимает слишком много времени для выполнения, потому что я хочудля оптимизации этого кода.

Например:

ВХОД

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;
}

1 Ответ

1 голос
/ 30 марта 2019

Код, необходимый буквально 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...