Created
November 12, 2013 11:38
-
Star
(229)
You must be signed in to star a gist -
Fork
(60)
You must be signed in to fork a gist
-
-
Save mycodeschool/7429492 to your computer and use it in GitHub Desktop.
Revisions
-
mycodeschool created this gist
Nov 12, 2013 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,87 @@ /* 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(); }