আমাদের একটি সার্কুলার লিঙ্কড লিস্ট দেওয়া আছে নোডসহ, এবং আমাদের কাজ হল সার্কুলার লিঙ্কড লিস্টে থাকা নোডগুলির সংখ্যা গণনা করা।
সার্কুলার লিঙ্কড লিস্ট হল লিঙ্কড লিস্টের একটি вариয়েশন যেখানে প্রথম উপাদানটি শেষ উপাদানকে পয়েন্ট করে এবং শেষ উপাদানটি প্রথম উপাদানকে পয়েন্ট করে। সিঙ্গলি লিঙ্কড লিস্ট এবং ডাবলি লিঙ্কড লিস্ট উভয়কেই সার্কুলার লিঙ্কড লিস্টে রূপান্তর করা যায়।
নিচের প্রোগ্রামে, আমরা একটি সিঙ্গলি লিঙ্কড লিস্টকে সার্কুলার লিঙ্কড লিস্ট হিসেবে ইমপ্লিমেন্ট করছি নোড গণনা করার জন্য।

উদাহরণ
ইনপুট − নোড: 20, 1, 2, 3, 4, 5 আউটপুট − নোডের গণনা: 6
ইনপুট − নোড: 20, 1, 2, 3, 4, 5, 7, 8, 9, 12 আউটপুট − নোডের গণনা: 10
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- সিঙ্গলি লিঙ্কড লিস্টের কাঠামো তৈরি করুন যাতে থাকে নোডের ঠিকানা এবং ডেটা
- একটি
push()ফাংশন তৈরি করুন যা নোডে ডেটা ইনসার্ট করতে ব্যবহৃত হবে - শেষ নোডে প্রথম নোডের ঠিকানা সংরক্ষণ করুন যাতে সিঙ্গলি লিঙ্কড লিস্ট সার্কুলার লিঙ্কড লিস্ট হিসেবে কাজ করে
- একটি কাউন্ট ফাংশন তৈরি করুন যা সার্কুলার লিঙ্কড লিস্টে মোট নোডের সংখ্যা গণনা করবে
উদাহরণ কোড
#include <stdio.h>
#include <stdlib.h>
/* নোড সংজ্ঞায়িত করা */
struct node {
int data;
struct node* next;
};
// সার্কুলার লিস্টে নোড ইনসার্ট
void push(struct node** head_ref, int data) {
struct node* ptr1 = (struct node*)malloc(sizeof(struct node));
struct node* temp = *head_ref;
ptr1->data = data;
ptr1->next = *head_ref;
// নতুন উপাদান ইনসার্ট করতে শেষ নোডে যান
if (*head_ref != NULL) {
while (temp->next != *head_ref) {
temp = temp->next;
}
temp->next = ptr1;
} else {
ptr1->next = ptr1; // প্রথম নোডের জন্য
}
*head_ref = ptr1;
}
// নোডের সংখ্যা গণনা করার ফাংশন
int count_fun(struct node* head) {
struct node* temp = head;
int result = 0;
if (head != NULL) {
do {
temp = temp->next;
result++;
} while (temp != head);
}
return result;
}
int main() {
/* লিস্টকে খালি হিসেবে আরম্ভ করুন */
struct node* head = NULL;
push(&head, 10);
push(&head, 20);
push(&head, 30);
push(&head, 40);
printf("count of nodes are: %d", count_fun(head));
return 0;
}
আউটপুট
যদি আমরা উপরের কোডটি রান করি তবে নিচের আউটপুট পাব −
count of nodes are: 4