#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
int data;
struct node *next;
};
void swap(struct node *a, struct node *b) {
struct node tmp;
}
void reverse(struct node *h) {
if (!h || !h->next) {
return;
}
struct node *tail = h->next;
while (tail->next) {
tail = tail->next;
}
swap(h, tail);
struct node *p = NULL;
struct node *c = tail;
do {
struct node *n = c->next;
c->next = p;
p = c;
c = n;
} while (c->next != tail);
h->next = c;
}
void print(struct node *p) {
while (p) {
p = p->next;
}
}
int main(void) {
struct node
*head
= malloc(sizeof(struct node
)); head->data = 1;
head
->next
= malloc(sizeof(struct node
)); head->next->data = 2;
head
->next
->next
= malloc(sizeof(struct node
)); head->next->next->data = 3;
head->next->next->next = NULL;
print(head);
reverse(head);
print(head);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKc3RydWN0IG5vZGUgewoJaW50IGRhdGE7CglzdHJ1Y3Qgbm9kZSAqbmV4dDsKfTsKCnZvaWQgc3dhcChzdHJ1Y3Qgbm9kZSAqYSwgc3RydWN0IG5vZGUgKmIpIHsKCXN0cnVjdCBub2RlIHRtcDsKCW1lbWNweSgmdG1wLCBhLCBzaXplb2YodG1wKSk7CgltZW1jcHkoYSwgYiwgc2l6ZW9mKHRtcCkpOwoJbWVtY3B5KGIsICZ0bXAsIHNpemVvZih0bXApKTsKfQoKdm9pZCByZXZlcnNlKHN0cnVjdCBub2RlICpoKSB7CglpZiAoIWggfHwgIWgtPm5leHQpIHsKCQlyZXR1cm47Cgl9CglzdHJ1Y3Qgbm9kZSAqdGFpbCA9IGgtPm5leHQ7Cgl3aGlsZSAodGFpbC0+bmV4dCkgewoJCXRhaWwgPSB0YWlsLT5uZXh0OwoJfQoJc3dhcChoLCB0YWlsKTsKCXN0cnVjdCBub2RlICpwID0gTlVMTDsKCXN0cnVjdCBub2RlICpjID0gdGFpbDsKCWRvIHsKCQlzdHJ1Y3Qgbm9kZSAqbiA9IGMtPm5leHQ7CgkJYy0+bmV4dCA9IHA7CgkJcCA9IGM7CgkJYyA9IG47Cgl9IHdoaWxlIChjLT5uZXh0ICE9IHRhaWwpOwoJaC0+bmV4dCA9IGM7Cn0KCnZvaWQgcHJpbnQoc3RydWN0IG5vZGUgKnApIHsKCXdoaWxlIChwKSB7CgkJcHJpbnRmKCIlZCAiLCBwLT5kYXRhKTsKCQlwID0gcC0+bmV4dDsKCX0KCXByaW50ZigiXG4iKTsKfQoKaW50IG1haW4odm9pZCkgewoJc3RydWN0IG5vZGUgKmhlYWQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CgloZWFkLT5kYXRhID0gMTsKCWhlYWQtPm5leHQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CgloZWFkLT5uZXh0LT5kYXRhID0gMjsKCWhlYWQtPm5leHQtPm5leHQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CgloZWFkLT5uZXh0LT5uZXh0LT5kYXRhID0gMzsKCWhlYWQtPm5leHQtPm5leHQtPm5leHQgPSBOVUxMOwoJcHJpbnQoaGVhZCk7CglyZXZlcnNlKGhlYWQpOwoJcHJpbnRmKCItLS0tLS1cbiIpOwoJcHJpbnQoaGVhZCk7CglyZXR1cm4gMDsKfQo=