#include #include typedef struct { int info; } DATA; typedef struct node { DATA data; struct node* next; } NODE; void init(NODE** head) { *head = NULL; } void print_list(NODE* head) { NODE * temp; for (temp = head; temp; temp = temp->next) printf("%5d", temp->data.info); printf("\n"); } NODE* add(NODE* node, DATA data) { NODE* temp = (NODE*) malloc(sizeof (NODE)); if (temp == NULL) { exit(0); // no memory available } temp->data = data; temp->next = node; node = temp; return node; } void add_at(NODE* node, DATA data) { NODE* temp = (NODE*) malloc(sizeof (NODE)); if (temp == NULL) { exit(EXIT_FAILURE); // no memory available } temp->data = data; temp->next = node->next; node->next = temp; } void remove_node(NODE* head) { NODE* temp = (NODE*) malloc(sizeof (NODE)); if (temp == NULL) { exit(EXIT_FAILURE); // no memory available } temp = head->next; head->next = head->next->next; free(temp); } NODE * reverse_rec(NODE * ptr, NODE * previous) { NODE * temp; if (ptr->next == NULL) { ptr->next = previous; return ptr; } else { temp = reverse_rec(ptr->next, ptr); ptr->next = previous; return temp; } } NODE * reverse(NODE * node) { NODE * temp; NODE * previous = NULL; while (node != NULL) { temp = node->next; node->next = previous; previous = node; node = temp; } return previous; } NODE *free_list(NODE *head) { NODE *tmpPtr = head; NODE *followPtr; while (tmpPtr != NULL) { followPtr = tmpPtr; tmpPtr = tmpPtr->next; free(followPtr); } return NULL; } NODE *sort_list(NODE *head) { NODE *tmpPtr = head, *tmpNxt = head->next; DATA tmp; while (tmpNxt != NULL) { while (tmpNxt != tmpPtr) { if (tmpNxt->data.info < tmpPtr->data.info) { tmp = tmpPtr->data; tmpPtr->data = tmpNxt->data; tmpNxt->data = tmp; } tmpPtr = tmpPtr->next; } tmpPtr = head; tmpNxt = tmpNxt->next; } return tmpPtr; } int main() { int i; NODE* head; NODE* node; DATA element; printf("Add Elements to List:\n"); init(&head); for (i = 53; i <= 63; i++) { if (i == 60) { element.info = 27; } else { element.info = i; } printf("Add Element %2d To The List.\n", element.info); head = add(head, element); } printf("\nPrint The List:\n"); print_list(head); printf("\nRemove An Element From The List:\n"); node = head->next->next->next->next; remove_node(node); print_list(head); printf("\nAdd An Element To The List:\n"); node = head->next->next->next; element.info = 2000; add_at(node, element); print_list(head); printf("\nReverse The list:\n"); head = reverse(head); // Revers The List print_list(head); printf("\nSort The list:\n"); head = sort_list(head); // Sort The List print_list(head); // free the list // head = free_list(head); return (EXIT_SUCCESS); }