#include<stdio.h>
struct ListNode{
int value;
ListNode* next;
};
void add_to_tail(ListNode **head,int value)
{
ListNode *p_value = new ListNode();
p_value->value = value;
p_value->next = NULL;
ListNode *p = *head;
if(*head == NULL){
*head = p_value;
}else {
while(p->next != NULL)
p = p->next;
p->next = p_value;
}
}
void printListFromTailToHead(ListNode **head)
{
if(*head ==NULL && head == NULL)
return;
ListNode *pNode = NULL;
ListNode *phead1 = NULL;
ListNode *phead2 = *head;
while(phead2->next != NULL)
{
pNode = phead2;
phead2 = phead2->next;
pNode->next = phead1;
phead1 = pNode;
}
if(phead1 != NULL){
pNode = phead2;
phead2 = phead2->next;
pNode->next = phead1;
phead1 = pNode;
*head = phead1;
}
}
int main(void)
{
ListNode *head = NULL;
add_to_tail(&head,3);
add_to_tail(&head,4);
add_to_tail(&head,5);
add_to_tail(&head,6);
add_to_tail(&head,7);
add_to_tail(&head,8);
add_to_tail(&head,9);
ListNode *p = head;
while(p->next != NULL)
{
printf("%d ",p->value);
p = p->next;
}
printf("%d ",p->value);
printListFromTailToHead(&head);
p = head;
while(p->next != NULL)
{
printf("%d ",p->value);
p = p->next;
}
printf("%d ",p->value);
}