Visual C++ - Doubly Linked List
I have given here Visual C++ sample code for doubly linked list, filling elements and traversal in forward and backward direction. I have NOT given the code for deleting the nodes. It is easy to implement by changing the insert functions.
Singly Linked List, Doubly Linked List, Singly Linked Circular List and Doubly Linked Circular List are an important data structure used in C++ applications.
Related Links:
- Turbo C++ - Reverse Singly Linked List
- Turbo C++ - Singly Linked Circular List
- Turbo C++ - Doubly Linked List
- Turbo C++ - Singly Linked List
- Visual C++ Program to Reverse Singly Linked List
- Visual C++ Program for Singly Linked Circular List
- Visual C++ Program for Doubly Linked List
- Visual C++ Program for Singly Linked List
- Java - Reverse Singly Linked List
- Java - Singly Linked Circular List
- Java - Doubly Linked List
- Java - Singly Linked List
- C# - Reverse Singly Linked List
- C# - Singly Linked Circular List
- C# - Doubly Linked List
- C# - Singly Linked List
Source Code
// Program for doubly linked list
#include <iostream>
#include <string>
struct DLinkList
{
std::string data;
DLinkList *next;
DLinkList *prev;
DLinkList() : data(""), next(NULL), prev(NULL) { }
DLinkList(const char *value) : data(value), next(NULL), prev(NULL) { }
DLinkList* InsertNext(const char *data)
{
DLinkList *node = new DLinkList(data);
if(this->next == NULL)
{
// Easy to handle
node->prev = this;
node->next = NULL; // already set in constructor
this->next = node;
}
else
{
// Insert in the middle
DLinkList *temp = this->next;
node->prev = this;
node->next = temp;
this->next = node;
temp->prev = node;
// temp->next does not have to be changed
}
return node;
}
DLinkList* InsertPrev(const char *data)
{
DLinkList *node = new DLinkList(data);
if(this->prev == NULL)
{
node->prev = NULL; // already set on constructor
node->next = this;
this->prev = node;
}
else
{
// Insert in the middle
DLinkList *temp = this->prev;
node->prev = temp;
node->next = this;
this->prev = node;
temp->next = node;
// temp->prev does not have to be changed
}
return node;
}
void TraverseFront(DLinkList *node = NULL)
{
if(node == NULL)
node = this;
std::cout << "\n\nTraversing in Forward Direction\n\n";
while(node != NULL)
{
std::cout << node->data;
std::cout << "\n";
node = node->next;
}
}
void TraverseBack(DLinkList *node = NULL)
{
if(node == NULL)
node = this;
std::cout << "\n\nTraversing in Backward Direction\n\n";
while(node != NULL)
{
std::cout << node->data;
std::cout << "\n";
node = node->prev;
}
}
};
int main()
{
DLinkList *node1 = new DLinkList("ONE");
DLinkList *node3 = node1->InsertNext("THREE");
DLinkList *node2 = node3->InsertPrev("TWO");
DLinkList *node5 = node3->InsertNext("FIVE");
DLinkList *node4 = node5->InsertPrev("FOUR");
node1->TraverseFront();
node5->TraverseBack();
std::cout << "\n";
return 0;
}
Output
Traversing in Forward Direction
ONE
TWO
THREE
FOUR
FIVE
Traversing in Backward Direction
FIVE
FOUR
THREE
TWO
ONE
|