#include <stdio.h>

#include <stdlib.h>


struct node{

    struct node* prev;

    int data;

    struct node* next;

};


struct node* create_node(int data);

void append_node(struct node *head, int data);

void print_all(struct node *head);

void print_all_reverse (struct node *head);


int main(void) {

    int i;

    struct node* n1 = create_node(1);

    for(i=2;i<=10;i++){

        append_node(n1, i);

    }

    print_all(n1);

    print_all_reverse(n1);

}


struct node* create_node(int data){

    struct node* new_node = (struct node*)malloc(sizeof(struct node));

    new_node->prev = NULL;

    new_node->next = NULL;

    new_node->data = data;

    return new_node;

}


void append_node(struct node *head, int data){

    struct node* new_node = create_node(data);

    struct node* temp = head;

    while(1){

        if (temp->next == NULL){

            break;

        }

        temp = temp->next;

    }

    temp->next = new_node;

    new_node->prev = temp;

}


void print_all(struct node *head){

    struct node* temp = head;

    while(1){

        printf("%d\n",temp->data);

        if (temp->next == NULL){

            break;

        }

        temp = temp->next;

    }

}

void print_all_reverse (struct node *head){

    struct node* temp = head;

    struct node* tmp = head;

    while (temp->next!=NULL){

        temp = temp->next;

    }

    while(1){

        printf("%d\n",temp->data);

        if(temp->prev == tmp){

            printf("%d\n",temp->prev->data);

            break;

        }

        temp = temp->prev;

    }

}