#include <stdio.h>
typedef struct node
{
struct node* next;
int data;
} Node;
Node * Change_Even_Odd(Node * L)
{
Node *oddhead = NULL, *evenhead = NULL, *lastodd = NULL, *lasteven = NULL, *current = L;
while (current != NULL)
{
// if current is even node
if (current->data % 2 == 0)
{
if (evenhead == NULL)
{
evenhead = current;
lasteven = current;
}
else
{
lasteven->next = current; // to connect the node to the list in the end
lasteven = current; // final list
}
}
else
{
// if current is odd node
if (oddhead == NULL)
{
oddhead = current;
lastodd = current;
}
else
{
lastodd->next = current;
lastodd = current;
}
}
current = current->next;
}
if (evenhead != NULL)
L = evenhead;
if (lasteven != NULL)
lasteven->next = oddhead;
if (lastodd != NULL)
lastodd->next = NULL;
return L;
}
void p(Node* L)
{
while(L)
{
L = L->next;
}
}
void f(Node* L)
{
Node*tmp;
while(L)
{
tmp = L;
L = L->next;
}
}
int main(void) {
int a[] = {3,1,8,2,5,6};
Node* L;
L
= malloc(sizeof *L
); // Add check for NULL Node* tmp = L;
int i = 0;
while(1)
{
tmp->data = a[i];
tmp->next = NULL;
++i;
if (i == (sizeof a)/(sizeof(int))) break;
tmp
->next
= malloc(sizeof *L
); // Add check for NULL tmp = tmp->next;
}
p(L);
L = Change_Even_Odd(L);
p(L);
f(L);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHN0cnVjdCBub2RlCnsKCXN0cnVjdCBub2RlKiBuZXh0OwoJaW50IGRhdGE7Cn0gTm9kZTsKCk5vZGUgKiBDaGFuZ2VfRXZlbl9PZGQoTm9kZSAqIEwpCnsKICAgICAgICBOb2RlICpvZGRoZWFkID0gTlVMTCwgKmV2ZW5oZWFkID0gTlVMTCwgKmxhc3RvZGQgPSBOVUxMLCAqbGFzdGV2ZW4gPSBOVUxMLCAqY3VycmVudCA9IEw7CiAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gTlVMTCkKICAgICAgICB7CiAgICAgICAgICAgIC8vIGlmIGN1cnJlbnQgaXMgZXZlbiBub2RlCiAgICAgICAgICAgIGlmIChjdXJyZW50LT5kYXRhICUgMiA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoZXZlbmhlYWQgPT0gTlVMTCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBldmVuaGVhZCA9IGN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgICAgbGFzdGV2ZW4gPSBjdXJyZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGxhc3RldmVuLT5uZXh0ID0gY3VycmVudDsgIC8vIHRvIGNvbm5lY3QgdGhlIG5vZGUgdG8gdGhlIGxpc3QgaW4gdGhlIGVuZAogICAgICAgICAgICAgICAgICAgIGxhc3RldmVuID0gY3VycmVudDsgIC8vIGZpbmFsIGxpc3QKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnQgaXMgb2RkIG5vZGUKICAgICAgICAgICAgICAgIGlmIChvZGRoZWFkID09IE5VTEwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgb2RkaGVhZCA9IGN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgICAgbGFzdG9kZCA9IGN1cnJlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbGFzdG9kZC0+bmV4dCA9IGN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgICAgbGFzdG9kZCA9IGN1cnJlbnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OwogICAgICAgIH0KCiAgICAgICAgaWYgKGV2ZW5oZWFkICE9IE5VTEwpCiAgICAgICAgICAgIEwgPSBldmVuaGVhZDsKICAgICAgICBpZiAobGFzdGV2ZW4gIT0gTlVMTCkKICAgICAgICAgICAgbGFzdGV2ZW4tPm5leHQgPSBvZGRoZWFkOwogICAgICAgIGlmIChsYXN0b2RkICE9IE5VTEwpCiAgICAgICAgICAgIGxhc3RvZGQtPm5leHQgPSBOVUxMOwoKICAgICAgICByZXR1cm4gTDsKCn0KCnZvaWQgcChOb2RlKiBMKQp7Cgl3aGlsZShMKQoJewoJCXByaW50ZigiJWQsICIsIEwtPmRhdGEpOwoJCUwgPSBMLT5uZXh0OwoJfQoJcHJpbnRmKCJcbiIpOwp9Cgp2b2lkIGYoTm9kZSogTCkKewogICAgTm9kZSp0bXA7CiAgICB3aGlsZShMKQogICAgewogICAgCXRtcCA9IEw7CiAgICAJTCA9IEwtPm5leHQ7CiAgICAJZnJlZSh0bXApOwogICAgfQp9CgppbnQgbWFpbih2b2lkKSB7CglpbnQgYVtdID0gezMsMSw4LDIsNSw2fTsKICAgIE5vZGUqIEw7CiAgICBMID0gbWFsbG9jKHNpemVvZiAqTCk7ICAvLyBBZGQgY2hlY2sgZm9yIE5VTEwKICAgIE5vZGUqIHRtcCA9IEw7CiAgICBpbnQgaSA9IDA7CiAgICB3aGlsZSgxKQogICAgewogICAgCXRtcC0+ZGF0YSA9IGFbaV07CiAgICAJdG1wLT5uZXh0ID0gTlVMTDsKICAgIAkrK2k7CiAgICAJaWYgKGkgPT0gKHNpemVvZiBhKS8oc2l6ZW9mKGludCkpKSBicmVhazsKICAgIAl0bXAtPm5leHQgPSBtYWxsb2Moc2l6ZW9mICpMKTsgIC8vIEFkZCBjaGVjayBmb3IgTlVMTAogICAgCXRtcCA9IHRtcC0+bmV4dDsKICAgIH0KCiAgICBwKEwpOyAgICAKICAgIEwgPSBDaGFuZ2VfRXZlbl9PZGQoTCk7CiAgICBwKEwpOwogICAgCiAgICBmKEwpOwoKCXJldHVybiAwOwp9Cg==
3, 1, 8, 2, 5, 6,
8, 2, 6, 3, 1, 5,