Skip to main content

Segregate even and odd nodes in sorted order in c++

C++ program for Segregate even and odd nodes in sorted order. Here problem description and other solutions.

// Include header file
#include <iostream>
using namespace std;
// C++ program for
// Segregate even and odd nodes in ascending order

// Linked list node
class LinkNode
{
	public: 
    int data;
	LinkNode *next;
	LinkNode(int data)
	{
		this->data = data;
		this->next = nullptr;
	}
};
class SingleLL
{
	public: LinkNode *head;
	SingleLL()
	{
		this->head = nullptr;
	}
	// Add new node at the end of linked list
	void insert(int value)
	{
		// Create  node
		LinkNode *node = new LinkNode(value);
		if (this->head == nullptr)
		{
			this->head = node;
		}
		else
		{
			LinkNode *temp = this->head;
			// Find last node
			while (temp->next != nullptr)
			{
				// Visit to next node
				temp = temp->next;
			}
			// Add node at last position
			temp->next = node;
		}
	}
	// Display all Linked List elements
	void display()
	{
		if (this->head != nullptr)
		{
			LinkNode *temp = this->head;
			while (temp != nullptr)
			{
				// Display node value
				cout << "  " << temp->data;
				// Visit to next node
				temp = temp->next;
			}
		}
		else
		{
			cout << "Empty Linked list" << endl;
		}
	}
	void sortedAdd(LinkNode *element)
	{
		if (this->head == nullptr)
		{
			this->head = element;
		}
		else if (this->head->data >= element->data)
		{
			element->next = this->head;
			this->head = element;
		}
		else
		{
			LinkNode *temp = this->head;
			// Finding location of inserting node
			while (temp->next != nullptr && 
                   temp->next->data < element->data)
			{
				// Visit to next node
				temp = temp->next;
			}
			// Add node 
			element->next = temp->next;
			temp->next = element;
		}
	}
	void segregateNode(SingleLL *odd, SingleLL *even)
	{
		LinkNode *node = nullptr;
		// Iterating the linked list node
		while (this->head != nullptr)
		{
			node = this->head;
			// Visit to next node
			this->head = node->next;
			// Set null to next node
			node->next = nullptr;
			if (node->data % 2 == 0)
			{
				// When node value is Even
				even->sortedAdd(node);
			}
			else
			{
				// When node value is Odd
				odd->sortedAdd(node);
			}
		}
	}
};
int main()
{
	// Create linked lists
	SingleLL *sll = new SingleLL();
	SingleLL *odd = new SingleLL();
	SingleLL *even = new SingleLL();
	// Linked list sll
	// 4 → 3 → 5 → 2 → 11 → 1 → 6 → NULL
	sll->insert(4);
	sll->insert(3);
	sll->insert(5);
	sll->insert(2);
	sll->insert(11);
	sll->insert(1);
	sll->insert(6);
	cout << "Initial Element" << endl;
	// Display all node
	sll->display();
	sll->segregateNode(odd, even);
	cout << "\nEven Element" << endl;
	// Display all even node
	even->display();
	cout << "\nOdd Element" << endl;
	// Display all odd node
	odd->display();
	return 0;
}

Output

Initial Element
  4  3  5  2  11  1  6
Even Element
  2  4  6
Odd Element
  1  3  5  11




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment