#include<stdio.h>
#include<stdlib.h>
//Declaration of Circular LL
struct CLLNode{
int data;
struct CLLNode* next;
};
//Counting Nodes in a CLL
int circularListLength(struct CLLNode* head){
struct CLLNode* current =head;
int count = 0;
if(head==NULL){
return 0;
}else{
do{
current = current->next;
count++;
}while (current!=head);
}
return count;
}
void push(struct CLLNode** head,struct CLLNode** tail,int data){
struct CLLNode
* newNode
= (struct CLLNode
*)malloc(sizeof(struct CLLNode
)); newNode->data = data;
if(*head == NULL){
*head = newNode;
*tail = newNode;
newNode->next = *head;
return;
}else{
(*tail)->next = newNode;
*tail = newNode;
(*tail)->next = *head;
return;
}
}
//Prints the contents of CLL
void printCLLData(struct CLLNode* head){
struct CLLNode* current = head;
if(head==NULL){
return;
// printf("List is empty!!!\n");
}else{
do{
current = current->next;
}while (current!=head);
}
}
int main(){
struct CLLNode* head = NULL;
struct CLLNode* tail = NULL;
push(&head,&tail,1);
push(&head,&tail,2);
push(&head,&tail,3);
push(&head,&tail,4);
push(&head,&tail,5);
push(&head,&tail,6);
printf("Circular linked list created:\n"); printCLLData(head);
printf("\nLenght of list:\n"); circularListLength(head);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+Ci8vRGVjbGFyYXRpb24gb2YgQ2lyY3VsYXIgTEwKIHN0cnVjdCBDTExOb2RlewogICAgaW50IGRhdGE7CiAgICBzdHJ1Y3QgQ0xMTm9kZSogbmV4dDsKfTsKCi8vQ291bnRpbmcgTm9kZXMgaW4gYSBDTEwKaW50IGNpcmN1bGFyTGlzdExlbmd0aChzdHJ1Y3QgQ0xMTm9kZSogaGVhZCl7CiAgICBzdHJ1Y3QgQ0xMTm9kZSogY3VycmVudCA9aGVhZDsKICAgIGludCBjb3VudCA9IDA7CiAgICBpZihoZWFkPT1OVUxMKXsKICAgICAgICByZXR1cm4gMDsKICAgIH1lbHNlewogICAgICAgIGRvewogICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dDsKICAgICAgICAgICAgY291bnQrKzsKICAgICAgICB9d2hpbGUgKGN1cnJlbnQhPWhlYWQpOwogICAgfQogICAgICByZXR1cm4gY291bnQ7CiAgICAgICAKfQp2b2lkIHB1c2goc3RydWN0IENMTE5vZGUqKiBoZWFkLHN0cnVjdCBDTExOb2RlKiogdGFpbCxpbnQgZGF0YSl7CiAgICBzdHJ1Y3QgQ0xMTm9kZSogbmV3Tm9kZSA9IChzdHJ1Y3QgQ0xMTm9kZSopbWFsbG9jKHNpemVvZihzdHJ1Y3QgQ0xMTm9kZSkpOwogICAgbmV3Tm9kZS0+ZGF0YSA9IGRhdGE7CiAgICBpZigqaGVhZCA9PSBOVUxMKXsKICAgICAgICAqaGVhZCA9IG5ld05vZGU7CiAgICAgICAgKnRhaWwgPSBuZXdOb2RlOwogICAgICAgIG5ld05vZGUtPm5leHQgPSAqaGVhZDsKICAgICAgICByZXR1cm47CiAgICB9ZWxzZXsKICAgICAgICAoKnRhaWwpLT5uZXh0ID0gbmV3Tm9kZTsKICAgICAgICAqdGFpbCA9IG5ld05vZGU7CiAgICAgICAgKCp0YWlsKS0+bmV4dCA9ICpoZWFkOwogICAgICAgIHJldHVybjsKICAgIH0KfQovL1ByaW50cyB0aGUgY29udGVudHMgb2YgQ0xMCnZvaWQgcHJpbnRDTExEYXRhKHN0cnVjdCBDTExOb2RlKiBoZWFkKXsKICAgIHN0cnVjdCBDTExOb2RlKiBjdXJyZW50ID0gaGVhZDsKICAgIGlmKGhlYWQ9PU5VTEwpewogICAgICAgIHJldHVybjsKICAgICAgICAvLyBwcmludGYoIkxpc3QgaXMgZW1wdHkhISFcbiIpOwogICAgfWVsc2V7CiAgICAgICAgZG97CiAgICAgICAgcHJpbnRmKCIlZCAiLGN1cnJlbnQtPmRhdGEpOwogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OwogICAgfXdoaWxlIChjdXJyZW50IT1oZWFkKTsgIAoKICAgIH0KICAgIAp9CmludCBtYWluKCl7CiAgICBzdHJ1Y3QgQ0xMTm9kZSogaGVhZCA9IE5VTEw7CiAgICBzdHJ1Y3QgQ0xMTm9kZSogdGFpbCA9IE5VTEw7CgogICAgcHVzaCgmaGVhZCwmdGFpbCwxKTsKICAgIHB1c2goJmhlYWQsJnRhaWwsMik7CiAgICBwdXNoKCZoZWFkLCZ0YWlsLDMpOwogICAgcHVzaCgmaGVhZCwmdGFpbCw0KTsKICAgIHB1c2goJmhlYWQsJnRhaWwsNSk7CiAgICBwdXNoKCZoZWFkLCZ0YWlsLDYpOwogICAgcHJpbnRmKCJDaXJjdWxhciBsaW5rZWQgbGlzdCBjcmVhdGVkOlxuIik7CiAgICBwcmludENMTERhdGEoaGVhZCk7CiAgICBwcmludGYoIlxuTGVuZ2h0IG9mIGxpc3Q6XG4iKTsKICAgIGNpcmN1bGFyTGlzdExlbmd0aChoZWFkKTsKICAgIHJldHVybiAwOwp9