#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node* next;
}node;
node *push(node *head, int k);
node *list_invert(node *head);
void print_list(node *head);
void listfree(node *head);
//Insert from head like stack.
node* push(node *head, int k){
node
*new
= malloc(sizeof(node
)); new -> data = k;
new -> next = NULL;
if(head == NULL){
return new;
}
else{
new -> next = head; //We have to set the pointer of inserted node
head = new;
return head;
}
}
node *list_invert(node *head){
node *curr = head, *prev = NULL, *succ = curr -> next;
while(succ != NULL){ //最後一個node不會做下列操作
curr -> next = prev;
prev = curr;
curr = succ;
succ = succ -> next;
}
curr -> next = prev; // 把最後一個node的pointer反過來。
head = curr;
return head;
}
void print_list(node* head){
while(head != NULL){
printf("%d -> ", head
-> data
); head = head -> next;
}
}
int main(int argc, char **argv){
node *head = NULL; //Empty Linked List;
head = push(head, 2);
head = push(head, 7);
head = push(head, 15);
head = push(head, 21);
print_list(head);
head = list_invert(head);
print_list(head);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+Cgp0eXBlZGVmIHN0cnVjdCBOb2RlewogICAgaW50IGRhdGE7CiAgICBzdHJ1Y3QgTm9kZSogbmV4dDsKfW5vZGU7Cgpub2RlICpwdXNoKG5vZGUgKmhlYWQsIGludCBrKTsKbm9kZSAqbGlzdF9pbnZlcnQobm9kZSAqaGVhZCk7CnZvaWQgcHJpbnRfbGlzdChub2RlICpoZWFkKTsKdm9pZCBsaXN0ZnJlZShub2RlICpoZWFkKTsKCi8vSW5zZXJ0IGZyb20gaGVhZCBsaWtlIHN0YWNrLgpub2RlKiBwdXNoKG5vZGUgKmhlYWQsIGludCBrKXsKICAgIG5vZGUgKm5ldyA9IG1hbGxvYyhzaXplb2Yobm9kZSkpOwogICAgbmV3IC0+IGRhdGEgPSBrOwogICAgbmV3IC0+IG5leHQgPSBOVUxMOyAgICAgCiAgICBpZihoZWFkID09IE5VTEwpewogICAgICAgIHJldHVybiBuZXc7CiAgICB9CiAgICBlbHNlewogICAgICAgIG5ldyAtPiBuZXh0ID0gaGVhZDsgLy9XZSBoYXZlIHRvIHNldCB0aGUgcG9pbnRlciBvZiBpbnNlcnRlZCBub2RlCiAgICAgICAgaGVhZCA9IG5ldzsKICAgICAgICByZXR1cm4gaGVhZDsKICAgIH0KCn0KCm5vZGUgKmxpc3RfaW52ZXJ0KG5vZGUgKmhlYWQpewogICAgbm9kZSAqY3VyciA9IGhlYWQsICpwcmV2ID0gTlVMTCwgKnN1Y2MgPSBjdXJyIC0+IG5leHQ7ICAgCiAgICB3aGlsZShzdWNjICE9IE5VTEwpeyAgICAvL+acgOW+jOS4gOWAi25vZGXkuI3mnIPlgZrkuIvliJfmk43kvZwKICAgICAgICBjdXJyIC0+IG5leHQgPSBwcmV2OwogICAgICAgIHByZXYgPSBjdXJyOwogICAgICAgIGN1cnIgPSBzdWNjOyAKICAgICAgICBzdWNjID0gc3VjYyAtPiBuZXh0OwogICAgfQogICAgY3VyciAtPiBuZXh0ID0gcHJldjsgLy8g5oqK5pyA5b6M5LiA5YCLbm9kZeeahHBvaW50ZXLlj43pgY7kvobjgIIKICAgIGhlYWQgPSBjdXJyOwogICAgcmV0dXJuIGhlYWQ7IAp9Cgp2b2lkIHByaW50X2xpc3Qobm9kZSogaGVhZCl7CiAgICB3aGlsZShoZWFkICE9IE5VTEwpewogICAgICAgIHByaW50ZigiJWQgLT4gIiwgaGVhZCAtPiBkYXRhKTsKICAgICAgICBoZWFkID0gaGVhZCAtPiBuZXh0OwogICAgfQogICAgcHJpbnRmKCJOVUxMXG4iKTsKfQoKCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpewogICAgbm9kZSAqaGVhZCA9IE5VTEw7IC8vRW1wdHkgTGlua2VkIExpc3Q7CiAgICBoZWFkID0gcHVzaChoZWFkLCAyKTsKICAgIGhlYWQgPSBwdXNoKGhlYWQsIDcpOwogICAgaGVhZCA9IHB1c2goaGVhZCwgMTUpOwogICAgaGVhZCA9IHB1c2goaGVhZCwgMjEpOwoKICAgIHByaW50X2xpc3QoaGVhZCk7CiAgICBoZWFkID0gbGlzdF9pbnZlcnQoaGVhZCk7CiAgICBwcmludF9saXN0KGhlYWQpOwoKCiAgICByZXR1cm4gMDsKfQo=