85 lines
1.4 KiB
C++
85 lines
1.4 KiB
C++
#include <iostream>
|
|
using namespace std;
|
|
|
|
class Node {
|
|
public:
|
|
int data;
|
|
Node* next;
|
|
};
|
|
|
|
class NodeOperation {
|
|
public:
|
|
// Function to add a new node
|
|
void pushNode(class Node** head_ref, int data_val)
|
|
{
|
|
|
|
// Allocate node
|
|
class Node* new_node = new Node();
|
|
|
|
// Put in the data
|
|
new_node->data = data_val;
|
|
|
|
// Link the old list off the new node
|
|
new_node->next = *head_ref;
|
|
|
|
// move the head to point to the new node
|
|
*head_ref = new_node;
|
|
}
|
|
|
|
// A utility function to print a given linked list
|
|
void printNode(class Node* head)
|
|
{
|
|
while (head != NULL) {
|
|
cout << head->data << "->";
|
|
head = head->next;
|
|
}
|
|
cout << "NULL" << endl;
|
|
}
|
|
|
|
/* Utility Function to find length of linked list */
|
|
int getLen(class Node* head)
|
|
{
|
|
int len = 0;
|
|
class Node* temp = head;
|
|
while (temp) {
|
|
len++;
|
|
temp = temp->next;
|
|
}
|
|
return len;
|
|
}
|
|
|
|
void printMiddle(class Node* head)
|
|
{
|
|
|
|
if (head) {
|
|
// find length
|
|
int len = getLen(head);
|
|
class Node* temp = head;
|
|
|
|
// trvaers till we reached half of length
|
|
int midIdx = len / 2;
|
|
while (midIdx--) {
|
|
temp = temp->next;
|
|
}
|
|
// temp will be storing middle element
|
|
cout << "The middle element is [" << temp->data
|
|
<< "]" << endl;
|
|
}
|
|
}
|
|
};
|
|
|
|
// Driver Code
|
|
int main()
|
|
{
|
|
class Node* head = NULL;
|
|
class NodeOperation* temp = new NodeOperation();
|
|
for (int i = 5; i > 0; i--) {
|
|
temp->pushNode(&head, i);
|
|
temp->printNode(head);
|
|
temp->printMiddle(head);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|