int Print(listack *head){
while(head != NULL){
printf("%s", head->data);
head = head->next;
}
printf("\n");
return 1;
}
listack* Flip_head_insert(listack *head){
listack *temp;
listack *Phead = NULL;
while(head != NULL){
temp = head;
head = head->next;
temp->next = Phead;
Phead = temp;
}
return Phead;
}
listack *Flip_recursion(listack *head){
if(head == NULL || head->next == NULL)
return head;
listack *newhead = Flip_recursion(head->next);
head->next->next = head;
head->next = NULL;
return newhead;
}
listack *Flip_local_reversal(listack *head){
listack *p, *q;
p = head;
q = head->next;
while(q != NULL){
p->next = q->next;
q->next = head;
head = q;
q = p->next;
}
return head;
}
listack* flip_list(listack *head, int k){
listack *p, *q, *tail;
p = head;
tail = head;
q = head->next;
int a = k;
int b = k;
while( tail != NULL && a > 1){
tail = tail->next;
a--;
}
if(tail == NULL)
return head;
while( q != NULL && b > 1){
p->next = q->next;
q->next = head;
head = q;
q = p->next;
b--;
}
p->next = flip_list(p->next, k);
return head;
}
int Flip_list(){
listack *head, *tail;
int n, k;
head = (listack*)malloc(sizeof(listack));
head->next = NULL;
printf("data num is ");
scanf("%d", &n);
tail = head;
int i = 1;
for(i ;i <= n;i++){
listack *list;
list = (listack *)malloc(sizeof(listack));
list->data = malloc(sizeof(list->data));
printf("data %d is ", i);
scanf("%s", list->data);
list->next = NULL;
tail->next = list;
tail = list;
}
printf("interval is ");
scanf("%d", &k);
Print(head->next);
tail = Flip_head_insert(head->next);
Print(tail);
tail = Flip_recursion(tail);
Print(tail);
tail = Flip_local_reversal(tail);
Print(tail);
tail = flip_list(tail, k);
Print(tail);
}