Here's a C++ program for a circular linked list:
```
#include <iostream>
using namespace std;
// Node structure
struct Node {
int data;
Node* next;
};
// Circular Linked List class
class CircularLinkedList {
public:
Node* head;
// Constructor
CircularLinkedList() { head = NULL; }
// Insert at beginning
void insertAtBeginning(int data) {
Node* newNode = new Node();
newNode->data = data;
if (head == NULL) {
head = newNode;
newNode->next = head;
} else {
Node* temp = head;
while (temp->next != head) {
temp = temp->next;
temp->next = newNode;
newNode->next = head;
head = newNode;
// Insert at end
void insertAtEnd(int data) {
Node* newNode = new Node();
newNode->data = data;
if (head == NULL) {
head = newNode;
newNode->next = head;
} else {
Node* temp = head;
while (temp->next != head) {
temp = temp->next;
temp->next = newNode;
newNode->next = head;
}
// Delete at beginning
void deleteAtBeginning() {
if (head == NULL) {
cout << "List is empty." << endl;
} else if (head->next == head) {
delete head;
head = NULL;
} else {
Node* temp = head;
while (temp->next != head) {
temp = temp->next;
Node* newNode = head->next;
temp->next = newNode;
delete head;
head = newNode;
// Delete at end
void deleteAtEnd() {
if (head == NULL) {
cout << "List is empty." << endl;
} else if (head->next == head) {
delete head;
head = NULL;
} else {
Node* temp = head;
while (temp->next->next != head) {
temp = temp->next;
delete temp->next;
temp->next = head;
// Print list
void printList() {
if (head == NULL) {
cout << "List is empty." << endl;
} else {
Node* temp = head;
do {
cout << temp->data << " ";
temp = temp->next;
} while (temp != head);
cout << endl;
};
int main() {
CircularLinkedList cll;
cll.insertAtBeginning(1);
cll.insertAtBeginning(2);
cll.insertAtEnd(3);
cll.insertAtEnd(4);
cout << "Circular Linked List: ";
cll.printList();
cll.deleteAtBeginning();
cll.deleteAtEnd();
cout << "After deletion: ";
cll.printList();
return 0;
```
Output:
```
Circular Linked List: 2 1 3 4
After deletion: 1 3
```
This C++ program demonstrates the following operations on a circular linked
list:
- Insertion at the beginning (`insertAtBeginning`)
- Insertion at the end (`insertAtEnd`)
- Deletion at the beginning (`deleteAtBeginning`)
- Deletion at the end (`deleteAtEnd`)
- Printing the list (`printList`)
You can modify and extend this code to suit your specific requirements.