D_L3

Linked Numbers

Jan 26th, 2024 (edited)
1,099
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.11 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4.  
  5. struct Node {
  6.     Node *next;
  7.     int data;
  8. };
  9.  
  10.  
  11. class LinkedList{
  12.     public:
  13.     LinkedList(){
  14.         head = nullptr;
  15.         tail = nullptr;
  16.     }
  17.     ~LinkedList(){
  18.         Node* temp;
  19.         while(head != nullptr){
  20.             temp = head;
  21.             head = head->next;
  22.             delete temp;
  23.         }
  24.     }
  25.     void add(int value){
  26.         Node* temp = new Node;
  27.         temp->data = value;
  28.         temp->next = nullptr;
  29.        
  30.         if (head == nullptr and tail == nullptr){
  31.             head = tail = temp;
  32.         } else {
  33.             tail->next = temp;
  34.             tail = temp;
  35.         }
  36.     }
  37.     void print(){
  38.         Node* curr = head;
  39.         while(curr != nullptr){
  40.             cout << curr->data << " ";
  41.             curr = curr->next;
  42.         }
  43.     }
  44.    
  45.     Node* getHead(){
  46.         return head;
  47.     }
  48.    
  49. private:
  50.     Node *head, *tail;
  51. };
  52.  
  53. void solve(LinkedList& num1, LinkedList& num2){
  54.     Node* curr1 = num1.getHead();
  55.     Node* curr2 = num2.getHead();
  56.     stringstream res;
  57.     int prev = 0;
  58.     while(curr1 && curr2){
  59.         int sum = curr1->data + curr2->data + prev;
  60.         res << (sum % 10);
  61.         prev = sum / 10;
  62.        
  63.         curr1 = curr1->next;
  64.         curr2 = curr2->next;
  65.     }
  66.        
  67.     while(curr1){
  68.         res << (curr1->data + prev) % 10;
  69.         prev = (curr1->data + prev) / 10;
  70.         curr1 = curr1->next;
  71.     }
  72.     while(curr2){
  73.         res << (curr2->data + prev) % 10;
  74.         prev = (curr2->data + prev) / 10;
  75.         curr2 = curr2->next;
  76.     }
  77.    
  78.     if(prev != 0)
  79.         res << prev;
  80.     string result;
  81.     res >> result;
  82.     reverse(result.begin(), result.end());
  83.     cout << result;
  84. }
  85.  
  86. int main(){
  87.     LinkedList num1, num2;
  88.  
  89.     int size1, size2;
  90.     cin >> size1;
  91.     for(int i = 0 ; i < size1 ; i++){
  92.         int digit;
  93.         cin >> digit;
  94.         num1.add(digit);
  95.     }
  96.    
  97.     cin >> size2;
  98.     for(int i = 0 ; i < size2 ; i++){
  99.         int digit;
  100.         cin >> digit;
  101.         num2.add(digit);
  102.     }
  103.  
  104.     solve(num1, num2);
  105. }
Advertisement
Add Comment
Please, Sign In to add comment