이 문제에서는 순환 연결 목록이 제공됩니다. 우리의 임무는 순환 연결 목록의 노드 합계를 찾는 프로그램을 만드는 것입니다.
연결 리스트의 모든 노드 값을 추가하기만 하면 됩니다.
몇 가지 중요한 정의
-
Linked List는 링크를 통해 서로 연결된 일련의 데이터 구조입니다.

-
순환 연결 목록은 첫 번째 요소가 마지막 요소를 가리키고 마지막 요소가 첫 번째 요소를 가리키는 연결 목록의 변형입니다. 단일 연결 목록과 이중 연결 목록은 모두 순환 연결 목록으로 만들 수 있습니다.

이제 문제를 이해하기 위해 예를 들어보겠습니다.
입력
14 -> 1 -> 7 -> 9 -> 2 -> 6
출력
39
설명
sum = 14 + 1 + 7 + 9 + 2 + 6 = 39
이 문제를 해결하기 위해 연결 목록을 탐색합니다. 그리고 각 노드의 값을 합계 변수에 추가합니다. 그런 다음 전체 목록을 순회할 때 합계를 반환합니다.
알고리즘
1단계 - sum =0 및 sumPointer =
초기화2단계 - do-while sumPointer !=머리. 하세요
2.1단계 − sum에 현재 노드의 값을 더합니다. 즉, sum +=sumPointer → value입니다.
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<<"The sum of Circular linked list is "<<CalcSumCirList(head);
return 0;
} 출력
The sum of Circular linked list is 39