Doubly Circular Linked List
Doubly Circular Linked List
struct student {
int rollno;
student *next;
student *prev;
};
void insertathead() {
if (head == NULL) {
head = newNode;
newNode->next = head;
newNode->prev = head;
} else {
newNode->next = head;
newNode->prev = tail;
head->prev = newNode;
tail->next = newNode;
head = newNode;
}
void insertatend() {
if (head == NULL) {
head = newNode;
newNode->next = head;
newNode->prev = head;
} else {
newNode->next = head;
newNode->prev = tail;
tail->next = newNode;
head->prev = newNode;
void insertatanyposition() {
int position;
cout << "Enter the position to insert the new node: ";
if (position <= 0) {
return;
}
student *newNode = new student();
cout << "Enter roll number for the new node: ";
if (head == NULL) {
head = newNode;
newNode->next = head;
newNode->prev = head;
return;
if (position == 1) {
insertathead();
return;
int count = 1;
temp = temp->next;
count++;
if (count == position - 1) {
newNode->next = temp->next;
newNode->prev = temp;
temp->next->prev = newNode;
temp->next = newNode;
} else {
delete newNode;
void print() {
if (head == NULL) {
return;
do {
cout << "Roll number of student: " << temp->rollno << endl;
temp = temp->next;
void deletefromhead() {
if (head == NULL) {
return;
if (head->next == head) {
delete head;
head = NULL;
} else {
head = head->next;
head->prev = tail;
tail->next = head;
delete temp;
void deletefromend() {
if (head == NULL) {
return;
if (head->next == head) {
delete head;
head = NULL;
} else {
newTail->next = head;
head->prev = newTail;
delete tail;
void deletefromanyposition() {
int position;
return;
if (position == 1) {
deletefromhead();
return;
int count = 1;
temp = temp->next;
count++;
temp->next = nodeToDelete->next;
nodeToDelete->next->prev = temp;
delete nodeToDelete;
cout << "Node deleted from position " << position << "."<<endl;
}
}
void searchElement() {
int roll;
int position = 1;
if (temp->rollno == roll) {
cout << "Student with roll number " << roll << " found at position " << position << "." << endl;
return;
temp = temp->next;
position++;
cout << "Student with roll number " << roll << " not found in the list." << endl;
void updateElement() {
cout << "Enter the position to update the roll number: ";
if (position <= 0) {
return;
}
int count = 1;
temp = temp->next;
count++;
if (temp == NULL) {
} else {
temp->rollno = newRoll;
cout << "Roll number at position " << position << " updated to " << newRoll << "." << endl;
int main() {
int ch;
do {
cout << "\nEnter choice according to the function you want to execute:" << endl;
switch (ch) {
case 1:
insertathead();
print();
break;
case 2:
insertatend();
print();
break;
case 3:
insertatanyposition();
print();
break;
case 4:
deletefromhead();
print();
break;
case 5:
deletefromend();
print();
break;
case 6:
deletefromanyposition();
print();
break;
case 7:
searchElement();
print();
break;
case 8:
updateElement();
print();
break;
case 0:
break;
default:
return 0;
Output :
Insert at head:
Insert at end:
Insert at any position:
Delete at head:
Delete at end:
Update: