इस समस्या में, हमें एक सर्कुलर लिंक्ड सूची दी गई है। हमारा कार्य एक प्रोग्राम बनाना है जो सर्कुलर लिंक्ड सूची के नोड्स का योग ढूंढे।
हमें बस लिंक्ड सूची के सभी नोड मानों को जोड़ना है।
कुछ महत्वपूर्ण परिभाषाएं
- लिंक्ड सूची डेटा संरचनाओं का एक क्रम है, जो लिंक्स के माध्यम से एक साथ जुड़े हुए हैं।

- सर्कुलर लिंक्ड सूची लिंक्ड सूची का एक रूपांतर है जिसमें पहला तत्व अंतिम तत्व की ओर इशारा करता है और अंतिम तत्व पहले तत्व की ओर इशारा करता है। सिंगली लिंक्ड सूची और डबल लिंक्ड सूची दोनों को सर्कुलर लिंक्ड सूची में बनाया जा सकता है।

अब, आइए एक उदाहरण लेकर समस्या को समझते हैं,
इनपुट
14 -> 1 -> 7 -> 9 -> 2 -> 6
आउटपुट
39
व्याख्या
योग = 14 + 1 + 7 + 9 + 2 + 6 = 39
इस समस्या को हल करने के लिए, हम लिंक्ड सूची को पार करेंगे। और प्रत्येक नोड के मान को एक योग चर में जोड़ेंगे। फिर योग लौटाएं, जब पूरी सूची पार हो जाए।
एल्गोरिदम
चरण 1 - योग = 0 और sumPointer = head आरंभ करें।
चरण 2 - do-while sumPointer != head करें।
चरण 2.1 - वर्तमान नोड के मान को योग में जोड़ें, यानी sum += sumPointer->data।
चरण 2.2 - अगले नोड पर पॉइंटर बढ़ाएं, यानी sumPointer = sumPointer->next।
चरण 3 - योग लौटाएं।
उदाहरण
समाधान को दर्शाने वाला प्रोग्राम,
#include <iostream>
using namespace std;
struct Node {
int data;
struct Node* next;
};
void pushNode(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 CalcSumCirList(struct Node* head) {
struct Node* sumPointer = head;
int sum = 0;
if (head != NULL) {
do {
sumPointer = sumPointer->next;
sum += sumPointer->data;
} while (sumPointer != head);
}
return sum;
}
int main() {
struct Node* head = NULL;
pushNode(&head, 4);
pushNode(&head, 7);
pushNode(&head, 12);
pushNode(&head, 1);
pushNode(&head, 9);
pushNode(&head, 6);
cout << "सर्कुलर लिंक्ड सूची का योग है " << CalcSumCirList(head);
return 0;
}
आउटपुट
सर्कुलर लिंक्ड सूची का योग है 39