typedef struct Link {
int elem;
struct Link* next;
}link;
link* initLink() {
link* p = NULL;
link* temp = (link*)malloc(sizeof(link));
temp->elem = 1;
temp->next = NULL;
p = temp;
for (int i = 2; i < 5; i++) {
link* a = (link*)malloc(sizeof(link));
a->elem = i;
a->next = NULL;
temp->next = a;
temp = temp->next;
}
return p;
}
void display(link* p) {
link* t = p;
while (t) {
printf("%d ", t->elem);
t = t->next;
}
printf("\n");
}
link* interation_reverse(link* p) {
if (p == NULL || p->next == NULL) {
return p;
}
else {
link* beg = NULL;
link* mid = p;
link* end = p->next;
while (1) {
mid->next = beg;
if (end == NULL) {
break;
}
beg = mid;
mid = end;
end = end->next;
}
p = mid;
return p;
}
}
link* recursive_reverse(link* head) {
if (head == NULL || head->next == NULL) {
return head;
}
else {
link* new_head = recursive_reverse(head->next);
head->next->next = head;
head->next = NULL;
return new_head;
}
}
link* head_reveres(link* head) {
link* new_head = NULL;
link* temp = NULL;
if (head == NULL || head->next == NULL) {
return head;
}
while (head != NULL) {
temp = head;
head = head->next;
temp->next = new_head;
new_head = temp;
}
return new_head;
}
link* local_reverse(link* head) {
link *beg = NULL;
link* end = NULL;
if (head == NULL || head->next == NULL) {
return head;
}
beg = head;
end = head->next;
while (end != NULL)
{
beg->next = end->next;
end->next = head;
head = end;
end = beg->next;
}
return head;
}
int main() {
link* p = initLink();
display(p);
p = local_reverse(p);
display(p);
return 0;
}