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

Tìm tích của N nút cuối cùng của Danh sách được liên kết đã cho trong C ++

Hãy xem xét chúng ta có ít phần tử trong một danh sách được liên kết. Chúng ta phải tìm kết quả nhân của n số phần tử cuối cùng. Giá trị của n cũng được cho trước. Vì vậy, nếu danh sách giống như [5, 7, 3, 5, 6, 9] và n =3, thì kết quả sẽ là 5 * 6 * 9 =270.

Quá trình này là thẳng về phía trước. Chúng tôi chỉ cần đọc phần tử hiện tại bắt đầu từ phía bên trái, sau đó thêm các phần tử vào ngăn xếp. Sau khi lấp đầy ngăn xếp, loại bỏ n phần tử và nhân chúng với sản phẩm. (ban đầu là 1), khi n số phần tử được duyệt qua thì dừng lại.

Ví dụ

#include<iostream>
#include<stack>
using namespace std;
   class Node{
   public:
      int data;
      Node *next;
   };
   Node* getNode(int data){
      Node *newNode = new Node;
      newNode->data = data;
      newNode->next = NULL;
      return newNode;
   }
   void append(struct Node** start, int key) {
      Node* new_node = getNode(key);
      Node *p = (*start);
      if(p == NULL){
         (*start) = new_node;
         return;
      }
      while(p->next != NULL){
         p = p->next;
      }
      p->next = new_node;
   }
   long long prodLastNElements(Node *start, int n) {
      if(n <= 0)
         return 0;
      stack<int> stk;
      long long res = 1;
      Node* temp = start;
      while (temp != NULL) {
         stk.push(temp->data);
         temp = temp->next;
      }
      while(n--){
         res *= stk.top();
         stk.pop();
      }
   return res;
}
int main() {
   Node *start = NULL;
   int arr[] = {5, 7, 3, 5, 6, 9};
   int size = sizeof(arr)/sizeof(arr[0]);
   int n = 3;
   for(int i = 0; i<size; i++){
      append(&start, arr[i]);
   }
   cout << "Product of last n elements: " << prodLastNElements(start, n);
}

Đầu ra

Product of last n elements: 270