To find out max sorted contiguous subsequence of an array

void maxSorted(int a[], int n) 
{
int s[n];
int i;

s[n-1] = 0;

for(i = n - 2; i >= 0; --i)
{
if(a[i] < a[i +1])
s[i] = s[i+1] + 1;
}

int max = n-1;

for( i = n -2; i >= 0; --i)
{
if(s[i] > s[max])
max = i;

}

for(i = max; i <= max + s[max]; ++i)
printf("%d ", a[i]);

printf("\n");
}

int main()
{
int a[] = {2, 3, 1, 2, 3, 4, 5, 2, 1, 3};
maxSorted(a, sizeof(a)/sizeof(int));
}

Reverse a Linked List in groups of given size K

Here is the iterative solution..

list reversek(list current, int k)
{
list r = NULL;
Node *head;

while(current)
{
int count = k;
Node *next, *prev = NULL;
Node *p = current;

while(current && count--)
{
next = current->next;
current->next = prev;
prev = current;
current = next;
}

if(!r)
r = prev;
else
head->next = prev;

head = p;
}
return r;
}