Starting Vocational Training From 1-May-2024 Get Detail
A Complete Overview Of Circular Linked List.
#include<iostream.h> struct Node { int data; struct Node *next; }; //insert a new node in an empty list struct Node *insertInEmpty(struct Node *last, int new_data) { // if last is not null then list is not empty, so return if (last != NULL) return last; // allocate memory for node struct Node *temp = new Node; // Assign the data. temp -> data = new_data; last = temp; // Create the link. last->next = last; return last; } //insert new node at the beginning of the list struct Node *insertAtBegin(struct Node *last, int new_data) { //if list is empty then add the node by calling insertInEmpty if (last == NULL) return insertInEmpty(last, new_data); //else create a new node struct Node *temp = new Node; //set new data to node temp -> data = new_data; temp -> next = last -> next; last -> next = temp; return last; } //insert new node at the end of the list struct Node *insertAtEnd(struct Node *last, int new_data) { //if list is empty then add the node by calling insertInEmpty if (last == NULL) return insertInEmpty(last, new_data); //else create a new node struct Node *temp = new Node; //assign data to new node temp -> data = new_data; temp -> next = last -> next; last -> next = temp; last = temp; return last; } //insert a new node in between the nodes struct Node *insertAfter(struct Node *last, int new_data, int after_item) { //return null if list is empty if (last == NULL) return NULL; struct Node *temp, *p; p = last -> next; do { if (p ->data == after_item) { temp = new Node; temp -> data = new_data; temp -> next = p -> next; p -> next = temp; if (p == last) last = temp; return last; } p = p -> next; } while(p != last -> next); cout << "The node with data "<<after_item << " is not present in the list." << endl; return last; } //traverse the circular linked list void traverseList(struct Node *last) { struct Node *p; // If list is empty, return. if (last == NULL) { cout << "Circular linked List is empty." << endl; return; } p = last -> next; // Point to the first Node in the list. // Traverse the list starting from first node until first node is visited again do { cout << p -> data << "==>"; p = p -> next; } while(p != last->next); if(p == last->next) cout<<p->data; cout<<" "; } //delete the node from the list void deleteNode(Node** head, int key) { // If linked list is empty retun if (*head == NULL) return; // If the list contains only a single node,delete that node; list is empty if((*head)->data==key && (*head)->next==*head) { free(*head); *head=NULL; } Node *last=*head,*d; // If key is the head if((*head)->data==key) { while(last->next!=*head) // Find the last node of the list last=last->next; // point last node to next of head or second node of the list last->next=(*head)->next; free(*head); *head=last->next; } // end of list is reached or node to be deleted not there in the list while(last->next!=*head&&last->next->data!=key) { last=last->next; } // node to be deleted is found, so free the memory and display the list if(last->next->data==key) { d=last->next; last->next=d->next; cout<<"The node with data "<<key<<" deleted from the list"<<endl; free(d); cout<<endl; cout<<"Circular linked list after deleting "<<key<<" is as follows:"<<endl; traverseList(last); } else cout<<"The node with data "<< key << " not found in the list"<<endl; } // main Program int main() { struct Node *last = NULL; last = insertInEmpty(last, 30); last = insertAtBegin(last, 20); last = insertAtBegin(last, 10); last = insertAtEnd(last, 40); last = insertAtEnd(last, 60); last = insertAfter(last, 50,40 ); cout<<"The circular linked list created is as follows:"<<endl; traverseList(last); deleteNode(&last,10); return 0; }