我做了将元素插入链表的代码正常工作。然后我写了代码以给定大小的组反转链表。我的问题是我的代码花费太多时间执行,因为我想要优化此代码。
例如:
输入
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;
}
答案 0 :(得分:1)
所需的代码实际上是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;
}