// Let's represent an integer in a linked list format by having each node represent a digit in the number. The nodes make up the number in reversed order.
// For example, the following linked list :
// 1 -> 2 -> 3 -> 4 -> 5
// is the number 54321.
// Given two linked lists in this format, return their sum in the same linked list format.
// For example, given
// 9 -> 9
// 5 -> 2
// return 124 (99 + 25) as:
// 4 -> 2 -> 1 (125)
#include <iostream>
#include <vector>
using namespace std;
class Node {
public:
Node(int data, Node* next = nullptr, Node* prev = nullptr)
{
setPrev(prev);
setNext(next);
setData(data);
}
void setPrev(Node* newPrev) { prev = newPrev; }
void setNext(Node* newNext) { next = newNext; }
void setData(int newData) { data = newData; }
Node* getPrev() { return prev; }
Node* getNext() { return next; }
int getData() { return data; }
private:
Node* prev = nullptr;
Node* next = nullptr;
int data = 0;
};
int generateInt(Node* head)
{
Node* node = head;
int temp = 0;
int result = 0;
unsigned place = 0;
while (node)
{
result += node->getData() * pow(10, (place));
++place;
node = node->getNext();
}
return result;
}
int listSum(Node* list1, Node* list2)
{
return generateInt(list1) + generateInt(list2);
}
int main()
{
Node* head1 = new Node(9);
head1->setNext(new Node(9, nullptr, head1));
Node* head2 = new Node(5);
head2->setNext(new Node(2, nullptr, head2));
auto result = listSum(head1, head2);
cout << "Sum is: " << result << endl;
return 0;
}
Comentarios