#include <stdio.h>
struct node {
char data[3];
struct node *next;
};
void swap(struct node **p0_next) {
struct node *p1 = *p0_next;
struct node *p2 = p1->next;
struct node *tmp = *p0_next;
*p0_next = p1->next;
p1->next = p2->next;
p2->next = tmp;
}
void print_list(struct node *cursor) {
for (; cursor != NULL; cursor = cursor->next) {
printf("[%s] -> ", cursor
->data
); if (cursor->next == NULL) {
}
}
}
int main(void) {
struct node list[5] = {
{ "p0", list + 1 },
{ "p1", list + 2 },
{ "p2", list + 3 },
{ "p3", NULL }
};
print_list(list);
swap(&list[0].next);
print_list(list);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpzdHJ1Y3Qgbm9kZSB7CgljaGFyIGRhdGFbM107CglzdHJ1Y3Qgbm9kZSAqbmV4dDsKfTsKCnZvaWQgc3dhcChzdHJ1Y3Qgbm9kZSAqKnAwX25leHQpIHsKCXN0cnVjdCBub2RlICpwMSA9ICpwMF9uZXh0OwoJc3RydWN0IG5vZGUgKnAyID0gcDEtPm5leHQ7CglzdHJ1Y3Qgbm9kZSAqdG1wID0gKnAwX25leHQ7CgkKCSpwMF9uZXh0ID0gcDEtPm5leHQ7CglwMS0+bmV4dCA9IHAyLT5uZXh0OwoJcDItPm5leHQgPSB0bXA7Cn0KCnZvaWQgcHJpbnRfbGlzdChzdHJ1Y3Qgbm9kZSAqY3Vyc29yKSB7Cglmb3IgKDsgY3Vyc29yICE9IE5VTEw7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkgewoJCXByaW50ZigiWyVzXSAtPiAiLCBjdXJzb3ItPmRhdGEpOwoJCWlmIChjdXJzb3ItPm5leHQgPT0gTlVMTCkgewoJCQlwcmludGYoIltOVUxMXVxuIik7CgkJfQoJfQp9CgppbnQgbWFpbih2b2lkKSB7CglzdHJ1Y3Qgbm9kZSBsaXN0WzVdID0gewoJCXsgInAwIiwgbGlzdCArIDEgfSwKCQl7ICJwMSIsIGxpc3QgKyAyIH0sCgkJeyAicDIiLCBsaXN0ICsgMyB9LAoJCXsgInAzIiwgTlVMTCB9Cgl9OwoJCglwcmludF9saXN0KGxpc3QpOwoJc3dhcCgmbGlzdFswXS5uZXh0KTsKCXByaW50X2xpc3QobGlzdCk7CgkKCXJldHVybiAwOwp9Cg==