C++ Linked List Exercises: Middle element of a Doubly Linked List
C++ Linked List: Exercise-20 with Solution
Write a C++ program to find the middle element of a given Doubly Linked List.
Test Data:
Doubly linked list is as follows:
------------------------------
Traversal in Forward direction: Orange White Green Red
Traversal in Reverse direction: Red Green White Orange
The middle element is: Green
Insert a new node at the end of a Doubly Linked List:
-------------------------------------------------------------
Traversal in Forward direction: Pink Orange White Green Red
Traversal in Reverse direction: Red Green White Orange Pink
The middle element is: White
Sample Solution:
C++ Code:
#include <iostream> // Including input-output stream header file
using namespace std; // Using standard namespace
// A doubly linked list node
struct Node {
string data; // Data field to store string data
struct Node* next; // Pointer to the next node
struct Node* prev; // Pointer to the previous node
Node *link; // Additional pointer, not used in the code
};
// Function to append data at the front of the doubly linked list
void append_data(Node** head, string new_data)
{
// Create a new node and allocate memory.
struct Node* newNode = new Node;
// Assign data to the new node
newNode->data = new_data;
// A new node has been added with the name head and the previous node
// set to null, since it is being added at the front.
newNode->next = (*head);
newNode->prev = NULL;
// Previous head is the new node
if ((*head) != NULL)
(*head)->prev = newNode;
// Head points to the new node
(*head) = newNode;
}
// Function to find and display the middle element of the doubly linked list
void Middle_element(Node** head)
{
struct Node *slowptr = *head;
struct Node *fastptr = *head;
if (head!=NULL)
{
while (fastptr != NULL && fastptr->next != NULL)
{
fastptr = fastptr->next->next;
slowptr = slowptr->next;
}
cout<<"\nThe middle element is: "<<slowptr->data;
}
}
// Following function displays contents of the doubly linked list
void displayDlList(Node* head)
{
Node* last_node;
cout << "\nTraversal in Forward direction: ";
while (head != NULL) {
cout << " " << head->data << " "; // Displaying data in forward direction
last_node = head;
head = head->next;
}
cout << "\nTraversal in Reverse direction: ";
while (last_node != NULL) {
cout << " " << last_node->data << " "; // Displaying data in reverse direction
last_node = last_node->prev;
}
}
// Main program
int main() {
/* Start with the empty list */
struct Node* head = NULL; // Initializing the head of the linked list as NULL
append_data(&head, "Red"); // Appending "Red" at the front of the list
append_data(&head, "Green"); // Appending "Green" at the front of the list
append_data(&head, "White"); // Appending "White" at the front of the list
append_data(&head, "Orange"); // Appending "Orange" at the front of the list
cout<<"Doubly linked list is as follows: ";
cout<<"\n---------------------------------";
displayDlList(head); // Displaying the doubly linked list
Middle_element(&head); // Finding and displaying the middle element
cout<<"\n\nInsert a new node:";
cout<<"\n--------------------";
append_data(&head, "Pink"); // Inserting "Pink" node at the front of the list
displayDlList(head); // Displaying the updated doubly linked list
Middle_element(&head); // Finding and displaying the new middle element
cout<<endl;
return 0; // Returning from the main function
}
Sample Output:
Doubly linked list is as follows: --------------------------------- Traversal in Forward direction: Orange White Green Red Traversal in Reverse direction: Red Green White Orange The middle element is: Green Insert a new node: -------------------- Traversal in Forward direction: Pink Orange White Green Red Traversal in Reverse direction: Red Green White Orange Pink The middle element is: White
Flowchart:
CPP Code Editor:
Contribute your code and comments through Disqus.
Previous C++ Exercise: Insert a new node at the end of a Doubly Linked List.
Next C++ Exercise: Insert new node at the middle of a Doubly Linked List.
What is the difficulty level of this exercise?
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://w3resource.com/cpp-exercises/linked_list/cpp-linked-list-exercise-20.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics