Computer >> Máy Tính >  >> Lập trình >> C ++

Tổng các nút của một danh sách được liên kết hình tròn trong C ++


Trong bài toán này, chúng ta được cung cấp một danh sách liên kết vòng. Nhiệm vụ của chúng tôi là tạo một chương trình để tìm tổng số các nút của Danh sách được liên kết theo hình tròn.

Chúng tôi chỉ cần thêm tất cả các giá trị nút của danh sách được liên kết.

Một số định nghĩa quan trọng

  • Danh sách được Liên kết là một chuỗi các cấu trúc dữ liệu, được kết nối với nhau thông qua các liên kết.

Tổng các nút của một danh sách được liên kết hình tròn trong C ++

  • Danh sách liên kết hình tròn là một biến thể của danh sách được liên kết trong đó phần tử đầu tiên trỏ đến phần tử cuối cùng và phần tử cuối cùng trỏ đến phần tử đầu tiên. Cả Danh sách liên kết đơn và Danh sách được liên kết kép đều có thể được tạo thành một danh sách liên kết vòng tròn.

Tổng các nút của một danh sách được liên kết hình tròn trong C ++

Bây giờ, hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

14 -> 1 -> 7 -> 9 -> 2 -> 6

Đầu ra

39

Giải thích

sum = 14 + 1 + 7 + 9 + 2 + 6 = 39

Để giải quyết vấn đề này, chúng tôi sẽ duyệt qua danh sách được liên kết. Và thêm giá trị của mỗi nút vào một biến tổng. Sau đó, trả về tổng khi toàn bộ danh sách được duyệt qua.

Thuật toán

Bước 1 - Khởi tạo sum =0 và sumPointer =

Bước 2 - Do-while sumPointer! =Head. Làm

Bước 2.1 - Thêm giá trị của nút hiện tại vào tổng, tức là sum + =sumPointer → giá trị.

Bước 2.2 - Con trỏ tăng dần đến nút tiếp theo, tức là sumPointer =sumPointer → tiếp theo.

Bước 3 - Trả lại Tổng.

Ví dụ

Chương trình minh họa giải pháp,

#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;
}

Đầu ra

The sum of Circular linked list is 39