double linked list in c
https://gist.github.com/mycodeschool/7429492
/* Doubly Linked List implementation */ #include<stdio.h> #include<stdlib.h> struct Node { int data; struct Node* next; struct Node* prev; }; struct Node* head; // global variable - pointer to head node. //Creates a new Node and returns pointer to it. struct Node* GetNewNode(int x) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = x; newNode->prev = NULL; newNode->next = NULL; return newNode; } //Inserts a Node at head of doubly linked list void InsertAtHead(int x) { struct Node* newNode = GetNewNode(x); if(head == NULL) { head = newNode; return; } head->prev = newNode; newNode->next = head; head = newNode; } //Inserts a Node at tail of Doubly linked list void InsertAtTail(int x) { struct Node* temp = head; struct Node* newNode = GetNewNode(x); if(head == NULL) { head = newNode; return; } while(temp->next != NULL) temp = temp->next; // Go To last Node temp->next = newNode; newNode->prev = temp; } //Prints all the elements in linked list in forward traversal order void Print() { struct Node* temp = head; printf("Forward: "); while(temp != NULL) { printf("%d ",temp->data); temp = temp->next; } printf("\n"); } //Prints all elements in linked list in reverse traversal order. void ReversePrint() { struct Node* temp = head; if(temp == NULL) return; // empty list, exit // Going to last Node while(temp->next != NULL) { temp = temp->next; } // Traversing backward using prev pointer printf("Reverse: "); while(temp != NULL) { printf("%d ",temp->data); temp = temp->prev; } printf("\n"); } int main() { /*Driver code to test the implementation*/ head = NULL; // empty list. set head as NULL. // Calling an Insert and printing list both in forward as well as reverse direction. InsertAtTail(2); Print(); ReversePrint(); InsertAtTail(4); Print(); ReversePrint(); InsertAtHead(6); Print(); ReversePrint(); InsertAtTail(8); Print(); ReversePrint(); }