#include <stdio.h>
#include <malloc.h>
typedef struct Node{
int data;
struct Node *next;
}Node;
void print(Node *lista, int pos, int length)
{
static int count=0;
int c,half=length/2;
Node *temp=lista;
if(count>=length)
return;
count++;
for(c=2;c<=pos;c++)
temp=temp->next;
if(pos==(half+1))
{
if(count<=half && length%2==0)
{
//printf("1. pos: %d\tlength: %d\n", pos-1, length);
print(lista,pos-1,length);
}
else
{
//printf("1. pos: %d\tlength: %d\n", half-1, length);
print(lista,half-1,length);
}
}
else if((pos==half) && (length%2==0))
{
//printf("2i). pos: %d\tlength: %d\n", pos+1, length);
print(lista,pos+1,length);
}
else if((pos==half-1) && (length%2==0))
{
if(count>half)
{
//printf("1. pos: %d\tlength: %d\n", half+2+(half-pos), length);
print(lista,half+2+(half-pos),length);
}
else
{
//printf("2. pos: %d\tlength: %d\n", pos+1, length);
print(lista,pos+1,length);
}
}
else if(pos>half)
{
if(count>half)
{
//printf("1. pos: %d\tlength: %d\n", half-(length-pos)-1, length);
print(lista,half-(length-pos)-1,length);
}
else
{
//printf("3. pos: %d\tlength: %d\n", 2+(length-pos), length);
print(lista,2+(length-pos),length);
}
}
else if((pos<half))
{
if(count>half)
{
//printf("1. pos: %d\tlength: %d\n", half+2+(half-pos), length);
print(lista,half+2+(half-pos),length);
}
else
{
//printf("4. pos: %d\tlength: %d\n", length-pos, length);
print(lista,length-pos,length);
}
}
}
// 1 2 3 4 5 6 7 8 9
// 1 8 3 6 5 4 7 2 9
// 1 2 3 4 5 6
// 1 5 3 4 2 6
// 1 2 3 4 5 6 7 8 9 10
// 1 9 3 7 5 6 4 8 2 10
Node *insert(Node *lista, int data)
{
Node *n1, *temp;
n1
=(Node
*)malloc(sizeof(Node
)); n1->data=data;
n1->next=NULL;
if(lista==NULL)
{
lista=n1;
return lista;
}
temp=lista;
for(;temp->next;temp=temp->next);
temp->next=n1;
return lista;
}
void disp(Node *lista)
{
for(;lista;lista=lista->next)
}
int main()
{
Node *lista=NULL;
int i,n;
for(i=1;i<=n;i++)
lista=insert(lista,i);
disp(lista);
//printf("%d\n", n/2);
print(lista,1,n);
return 0;
}
// 1 2 3 4 5 6 7 8 9
// 1 8 3 6 5 4 7 2 9
// 1 2 3 4 5 6
// 1 5 3 4 2 6
// 3
// 1 5 3
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYWxsb2MuaD4KCnR5cGVkZWYgc3RydWN0IE5vZGV7CglpbnQgZGF0YTsKCXN0cnVjdCBOb2RlICpuZXh0Owp9Tm9kZTsKCnZvaWQgcHJpbnQoTm9kZSAqbGlzdGEsIGludCBwb3MsIGludCBsZW5ndGgpCnsKCXN0YXRpYyBpbnQgY291bnQ9MDsKCWludCBjLGhhbGY9bGVuZ3RoLzI7CglOb2RlICp0ZW1wPWxpc3RhOwoJaWYoY291bnQ+PWxlbmd0aCkKCQlyZXR1cm47Cgljb3VudCsrOwoJZm9yKGM9MjtjPD1wb3M7YysrKQoJCXRlbXA9dGVtcC0+bmV4dDsKCXByaW50ZigiJWRcdFxuIix0ZW1wLT5kYXRhKTsKCWlmKHBvcz09KGhhbGYrMSkpCgl7CgkJaWYoY291bnQ8PWhhbGYgJiYgbGVuZ3RoJTI9PTApCgkJewoJCQkvL3ByaW50ZigiMS4gcG9zOiAlZFx0bGVuZ3RoOiAlZFxuIiwgcG9zLTEsIGxlbmd0aCk7CgkJCXByaW50KGxpc3RhLHBvcy0xLGxlbmd0aCk7CgkJfQoJCWVsc2UKCQl7CgkJCS8vcHJpbnRmKCIxLiBwb3M6ICVkXHRsZW5ndGg6ICVkXG4iLCBoYWxmLTEsIGxlbmd0aCk7CgkJCXByaW50KGxpc3RhLGhhbGYtMSxsZW5ndGgpOwoJCX0KCX0KCWVsc2UgaWYoKHBvcz09aGFsZikgJiYgKGxlbmd0aCUyPT0wKSkKCXsKCQkvL3ByaW50ZigiMmkpLiBwb3M6ICVkXHRsZW5ndGg6ICVkXG4iLCBwb3MrMSwgbGVuZ3RoKTsKCQlwcmludChsaXN0YSxwb3MrMSxsZW5ndGgpOwoJfQoJZWxzZSBpZigocG9zPT1oYWxmLTEpICYmIChsZW5ndGglMj09MCkpCgl7CgkJaWYoY291bnQ+aGFsZikKCQl7CgkJCS8vcHJpbnRmKCIxLiBwb3M6ICVkXHRsZW5ndGg6ICVkXG4iLCBoYWxmKzIrKGhhbGYtcG9zKSwgbGVuZ3RoKTsKCQkJcHJpbnQobGlzdGEsaGFsZisyKyhoYWxmLXBvcyksbGVuZ3RoKTsKCQl9CgkJZWxzZQoJCXsKCQkJLy9wcmludGYoIjIuIHBvczogJWRcdGxlbmd0aDogJWRcbiIsIHBvcysxLCBsZW5ndGgpOwoJCQlwcmludChsaXN0YSxwb3MrMSxsZW5ndGgpOwoJCX0KCX0KCWVsc2UgaWYocG9zPmhhbGYpCgl7CgkJaWYoY291bnQ+aGFsZikKCQl7CgkJCS8vcHJpbnRmKCIxLiBwb3M6ICVkXHRsZW5ndGg6ICVkXG4iLCBoYWxmLShsZW5ndGgtcG9zKS0xLCBsZW5ndGgpOwoJCQlwcmludChsaXN0YSxoYWxmLShsZW5ndGgtcG9zKS0xLGxlbmd0aCk7CgkJfQoJCWVsc2UKCQl7CgkJCS8vcHJpbnRmKCIzLiBwb3M6ICVkXHRsZW5ndGg6ICVkXG4iLCAyKyhsZW5ndGgtcG9zKSwgbGVuZ3RoKTsKCQkJcHJpbnQobGlzdGEsMisobGVuZ3RoLXBvcyksbGVuZ3RoKTsKCQl9Cgl9CgllbHNlIGlmKChwb3M8aGFsZikpCgl7CgkJaWYoY291bnQ+aGFsZikKCQl7CgkJCS8vcHJpbnRmKCIxLiBwb3M6ICVkXHRsZW5ndGg6ICVkXG4iLCBoYWxmKzIrKGhhbGYtcG9zKSwgbGVuZ3RoKTsKCQkJcHJpbnQobGlzdGEsaGFsZisyKyhoYWxmLXBvcyksbGVuZ3RoKTsKCQl9CgkJZWxzZQoJCXsKCQkJLy9wcmludGYoIjQuIHBvczogJWRcdGxlbmd0aDogJWRcbiIsIGxlbmd0aC1wb3MsIGxlbmd0aCk7CgkJCXByaW50KGxpc3RhLGxlbmd0aC1wb3MsbGVuZ3RoKTsKCQl9Cgl9Cn0KLy8gMSAyIDMgNCA1IDYgNyA4IDkKLy8gMSA4IDMgNiA1IDQgNyAyIDkKCi8vIDEgMiAzIDQgNSA2Ci8vIDEgNSAzIDQgMiA2CgoKLy8gMSAyIDMgNCA1IDYgNyA4IDkgMTAKLy8gMSA5IDMgNyA1IDYgNCA4IDIgMTAKTm9kZSAqaW5zZXJ0KE5vZGUgKmxpc3RhLCBpbnQgZGF0YSkKewoJTm9kZSAqbjEsICp0ZW1wOwoJbjE9KE5vZGUgKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCW4xLT5kYXRhPWRhdGE7CgluMS0+bmV4dD1OVUxMOwoJaWYobGlzdGE9PU5VTEwpCgl7CgkJbGlzdGE9bjE7CgkJcmV0dXJuIGxpc3RhOwoJfQoJdGVtcD1saXN0YTsKCWZvcig7dGVtcC0+bmV4dDt0ZW1wPXRlbXAtPm5leHQpOwoJdGVtcC0+bmV4dD1uMTsKCXJldHVybiBsaXN0YTsKfQoKdm9pZCBkaXNwKE5vZGUgKmxpc3RhKQp7Cglmb3IoO2xpc3RhO2xpc3RhPWxpc3RhLT5uZXh0KQoJCXByaW50ZigiJWQtLT4iLGxpc3RhLT5kYXRhKTsKfQoKaW50IG1haW4oKQp7CglOb2RlICpsaXN0YT1OVUxMOwoJaW50IGksbjsKCXNjYW5mKCIlZCIsJm4pOwoJZm9yKGk9MTtpPD1uO2krKykKCQlsaXN0YT1pbnNlcnQobGlzdGEsaSk7CglkaXNwKGxpc3RhKTsKCXByaW50ZigiXG4iKTsKCS8vcHJpbnRmKCIlZFxuIiwgbi8yKTsKCXByaW50KGxpc3RhLDEsbik7CglyZXR1cm4gMDsKfQoKLy8gMSAyIDMgNCA1IDYgNyA4IDkKLy8gMSA4IDMgNiA1IDQgNyAyIDkKCgoKLy8gMSAyIDMgNCA1IDYKLy8gMSA1IDMgNCAyIDYKCi8vIDMKLy8gMSA1IDM=