Untitled
unknown
plain_text
a year ago
2.2 kB
11
Indexable
#include <iostream> #include <string> using namespace std; struct Node { int data; Node* next; Node(int val) { data = val; next = nullptr; } }; Node* reverseList(Node* head) { Node* prev = nullptr; Node* current = head; Node* next = nullptr; while (current != nullptr) { next = current->next; current->next = prev; prev = current; current = next; } return prev; } Node* addStrings(string s1, string s2) { Node* head1 = nullptr; Node* head2 = nullptr; // Create linked lists from the strings for (int i = s1.length() - 1; i >= 0; i--) { Node* newNode = new Node(s1[i] - '0'); newNode->next = head1; head1 = newNode; } for (int i = s2.length() - 1; i >= 0; i--) { Node* newNode = new Node(s2[i] - '0'); newNode->next = head2; head2 = newNode; } // Reverse both linked lists head1 = reverseList(head1); head2 = reverseList(head2); // Perform addition Node* resultHead = nullptr; Node* resultTail = nullptr; int carry = 0; Node* temp1 = head1; Node* temp2 = head2; while (temp1 || temp2 || carry) { int sum; if (temp1 && temp2) { sum = temp1->data + temp2->data + carry; } else if (temp1) { sum = temp1->data + carry; } else if (temp2) { sum = temp2->data + carry; } else { sum = carry; } carry = sum / 10; sum %= 10; Node* newNode = new Node(sum); if (!resultHead) { resultHead = newNode; resultTail = newNode; } else { resultTail->next = newNode; resultTail = newNode; } if (temp1) { temp1 = temp1->next;} if (temp2) { temp2 = temp2->next;} } // Reverse the result linked list resultHead = reverseList(resultHead); return resultHead; } void printList(Node* head) { while (head) { cout << head->data; head = head->next; } cout << endl; } int main() { string s1 = "119"; string s2 = "82"; Node* result = addStrings(s1, s2); cout << "Sum: "; printList(result); return 0; }
Editor is loading...
Leave a Comment