/*Adobe Elitmus Written Test on 27-10-2013 @Bangalore - Algo/DS questions
*Question 1
*/
/* Reverse every alterante K elements of a list
* It is to be noted that Nodes have to reversed and not the values
* e.g. if k=3 and list is
* Input 1->2->3->4->5->6->7->8->9->NULL
* Output 3->2->1->4->5->6->9->8->7->NULL
*
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct SLL{
int element;
struct SLL * next;
} Node;
Node * start= NULL;
void InsertNode( Node * start, int item)
{
Node * tmp= start;
if ( tmp == NULL)
{
printf ( "Error : Start pointer is NUll\n " ) ; return ;
}
//construct a node with item element
Node
* node
= malloc ( sizeof ( Node
) ) ; node-> next= NULL;
node-> element= item;
while ( tmp-> next != NULL) tmp= tmp-> next;
tmp-> next= node; //node inerted at end
}
void PrintListElements( Node * start)
{
Node * tmp= start;
while ( tmp != NULL)
{
tmp= tmp-> next;
}
}
void ReverseAlternateKElements( Node * start, int K, Node ** startPointer)
{
int i, j, count;
Node * current= start;
Node * prev= NULL,* prev2= NULL;
Node * save= NULL;
Node * next= NULL;
Node * tmp= NULL;
for ( i= 0 ;; )
{
if ( current == NULL) break ;
if ( i% K== 0 )
{
count= 0 ;
save= current;
//printf("current=%d\n",current->element);
for ( j= 0 ; j< K; )
{
if ( current == NULL) break ;
next= current-> next;
current-> next= prev;
prev= current;
current= next;
j++;
++ count;
}
if ( i< K)
{
* startPointer= prev;
tmp= prev;
}
save-> next= current; // for last node of the series to point to next current;
if ( prev2 != NULL)
prev2-> next= prev;
if ( current == NULL) break ;
//PrintListElements(tmp);
i= i+ count+ 1 ;
}
else
{
current = current-> next;
if ( current == NULL) break ;
i++;
if ( i% K== 0 )
{
prev= current;
prev2= current;
current= current-> next;
}
}
}
printf ( "----Reversal Done!!! :)\n " ) ; //PrintListElements(tmp);
}
int main( )
{
int K= 4 ; //Input
start-> next= NULL;
start-> element= 1 ; // Inputs
InsertNode( start, 2 ) ; //Inputs .....
InsertNode( start, 3 ) ;
InsertNode( start, 4 ) ;
InsertNode( start, 5 ) ;
InsertNode( start, 6 ) ;
InsertNode( start, 7 ) ;
InsertNode( start, 8 ) ;
InsertNode( start, 9 ) ;
InsertNode( start, 10 ) ;
InsertNode( start, 11 ) ;
InsertNode( start, 12 ) ;
InsertNode( start, 13 ) ;
InsertNode( start, 14 ) ;
printf ( "Element Before Reversal:\n " ) ; PrintListElements( start) ;
ReverseAlternateKElements( start, K, & start) ;
printf ( "Element After Reversal:\n " ) ; PrintListElements( start) ;
return 0 ;
}
LypBZG9iZSBFbGl0bXVzIFdyaXR0ZW4gVGVzdCBvbiAyNy0xMC0yMDEzICBAQmFuZ2Fsb3JlIC0gQWxnby9EUyBxdWVzdGlvbnMKICpRdWVzdGlvbiAxCiAqLwoKLyogUmV2ZXJzZSBldmVyeSBhbHRlcmFudGUgSyBlbGVtZW50cyBvZiBhIGxpc3QgCiAqIEl0IGlzIHRvIGJlIG5vdGVkIHRoYXQgTm9kZXMgaGF2ZSB0byByZXZlcnNlZCBhbmQgbm90IHRoZSB2YWx1ZXMKICogZS5nLiBpZiBrPTMgYW5kIGxpc3QgaXMKICogSW5wdXQgMS0+Mi0+My0+NC0+NS0+Ni0+Ny0+OC0+OS0+TlVMTAogKiBPdXRwdXQgMy0+Mi0+MS0+NC0+NS0+Ni0+OS0+OC0+Ny0+TlVMTAogKiAKKi8KCiNpbmNsdWRlPHN0ZGlvLmg+CiNpbmNsdWRlPHN0ZGxpYi5oPgoKdHlwZWRlZiBzdHJ1Y3QgU0xMewoJaW50IGVsZW1lbnQ7CglzdHJ1Y3QgU0xMICpuZXh0Owp9Tm9kZTsKCk5vZGUgKnN0YXJ0PU5VTEw7Cgp2b2lkIEluc2VydE5vZGUoTm9kZSAqc3RhcnQsIGludCBpdGVtKQp7CglOb2RlICp0bXA9c3RhcnQ7CgoJaWYodG1wID09IE5VTEwpCgl7CgkJcHJpbnRmKCJFcnJvciA6IFN0YXJ0IHBvaW50ZXIgaXMgTlVsbFxuIik7CgkJcmV0dXJuOwoJfQoKCS8vY29uc3RydWN0IGEgbm9kZSB3aXRoIGl0ZW0gZWxlbWVudAoJTm9kZSAqbm9kZT1tYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCW5vZGUtPm5leHQ9TlVMTDsKCW5vZGUtPmVsZW1lbnQ9aXRlbTsKCgl3aGlsZSh0bXAtPm5leHQgIT1OVUxMKSB0bXA9dG1wLT5uZXh0OwoKCXRtcC0+bmV4dD1ub2RlOyAvL25vZGUgaW5lcnRlZCBhdCBlbmQKfQoKdm9pZCBQcmludExpc3RFbGVtZW50cyhOb2RlICpzdGFydCkKewoJTm9kZSAqdG1wPXN0YXJ0OwoKCXdoaWxlKHRtcCAhPSBOVUxMKQoJewoJCXByaW50ZigiJWQtPiIsdG1wLT5lbGVtZW50KTsKCQl0bXA9dG1wLT5uZXh0OwoJfQoJCXByaW50ZigiTlVMTFxuIik7Cn0KCnZvaWQgUmV2ZXJzZUFsdGVybmF0ZUtFbGVtZW50cyhOb2RlICpzdGFydCwgaW50IEssIE5vZGUgKipzdGFydFBvaW50ZXIpCnsKCWludCBpLGosY291bnQ7CglOb2RlICpjdXJyZW50PXN0YXJ0OwoJTm9kZSAqcHJldj1OVUxMLCpwcmV2Mj1OVUxMOwoJTm9kZSAqc2F2ZT1OVUxMOwoJTm9kZSAqbmV4dD1OVUxMOwoJTm9kZSAqdG1wPU5VTEw7CgoJZm9yKGk9MDs7KQoJewoJCWlmKGN1cnJlbnQgPT0gTlVMTCkgYnJlYWs7CgkJaWYoaSVLPT0wKQoJCXsKCQkJY291bnQ9MDsKCQkJc2F2ZT1jdXJyZW50OwoJCQkvL3ByaW50ZigiY3VycmVudD0lZFxuIixjdXJyZW50LT5lbGVtZW50KTsKCQkJZm9yKGo9MDtqPEs7KQoJCQl7CgkJCQlpZihjdXJyZW50ID09IE5VTEwpIGJyZWFrOwoJCQkJbmV4dD1jdXJyZW50LT5uZXh0OwkKCQkJCWN1cnJlbnQtPm5leHQ9cHJldjsKCQkJCXByZXY9Y3VycmVudDsKCQkJCWN1cnJlbnQ9bmV4dDsKCQkJCWorKzsKCQkJCSsrY291bnQ7CgkJCX0KCQkJaWYoaTxLKSAKCQkJewoJCQkJKnN0YXJ0UG9pbnRlcj1wcmV2OwoJCQkJdG1wPXByZXY7CgkJCX0KCQkJc2F2ZS0+bmV4dD1jdXJyZW50OyAvLyBmb3IgbGFzdCBub2RlIG9mIHRoZSBzZXJpZXMgdG8gcG9pbnQgdG8gbmV4dCBjdXJyZW50OwoKCQkJaWYocHJldjIgIT0gTlVMTCkKCQkJCXByZXYyLT5uZXh0PXByZXY7CgkJCWlmKGN1cnJlbnQgPT0gTlVMTCkgYnJlYWs7CgkJCS8vUHJpbnRMaXN0RWxlbWVudHModG1wKTsKCQkJaT1pK2NvdW50KzE7CgoJCX0KCQllbHNlCgkJewoJCQkKCQkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CgkJCWlmKGN1cnJlbnQgPT0gTlVMTCkgYnJlYWs7CgkJCWkrKzsKCQkJaWYoaSVLPT0wKSAKCQkJewoJCQkJcHJldj1jdXJyZW50OwoJCQkJcHJldjI9Y3VycmVudDsKCQkJCWN1cnJlbnQ9Y3VycmVudC0+bmV4dDsKCQkJfQoJCX0KCX0KCglwcmludGYoIi0tLS1SZXZlcnNhbCBEb25lISEhIDopXG4iKTsKCS8vUHJpbnRMaXN0RWxlbWVudHModG1wKTsKCn0KCgoKaW50IG1haW4oKQp7CglpbnQgSz00OyAvL0lucHV0CglzdGFydD1tYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCQoJCglzdGFydC0+bmV4dD1OVUxMOwoJc3RhcnQtPmVsZW1lbnQ9MTsgLy8gSW5wdXRzCglJbnNlcnROb2RlKHN0YXJ0LDIpOyAvL0lucHV0cyAuLi4uLgoJSW5zZXJ0Tm9kZShzdGFydCwzKTsKCUluc2VydE5vZGUoc3RhcnQsNCk7CglJbnNlcnROb2RlKHN0YXJ0LDUpOwoJSW5zZXJ0Tm9kZShzdGFydCw2KTsKCUluc2VydE5vZGUoc3RhcnQsNyk7CglJbnNlcnROb2RlKHN0YXJ0LDgpOwoJSW5zZXJ0Tm9kZShzdGFydCw5KTsKCUluc2VydE5vZGUoc3RhcnQsMTApOwoJSW5zZXJ0Tm9kZShzdGFydCwxMSk7CglJbnNlcnROb2RlKHN0YXJ0LDEyKTsKCUluc2VydE5vZGUoc3RhcnQsMTMpOwoJSW5zZXJ0Tm9kZShzdGFydCwxNCk7CgkKCXByaW50ZigiRWxlbWVudCBCZWZvcmUgUmV2ZXJzYWw6XG4iKTsKCVByaW50TGlzdEVsZW1lbnRzKHN0YXJ0KTsKCglSZXZlcnNlQWx0ZXJuYXRlS0VsZW1lbnRzKHN0YXJ0LCBLLCAmc3RhcnQpOwoJCgkKCXByaW50ZigiRWxlbWVudCBBZnRlciBSZXZlcnNhbDpcbiIpOwoJUHJpbnRMaXN0RWxlbWVudHMoc3RhcnQpOwoKCXJldHVybiAwOwp9CQo=