# A+b Problem
## 题解+思路
### 题解
```cpp
#include <iostream>
using namespace std;
struct Node
{
int data;
Node *prev;
Node *next;
Node(int val) : data(val), prev(nullptr), next(nullptr) {}
};
Node *createList(int num)
{
Node *head = nullptr;
Node *tail = nullptr;
while (num > 0)
{
int digit = num % 10;
Node *newNode = new Node(digit);
if (head == nullptr)
{
head = newNode;
tail = newNode;
}
else
{
newNode->next = head;
head->prev = newNode;
head = newNode;
}
num /= 10;
}
return head;
}
Node *addTwoNumbers(Node *num1, Node *num2)
{
Node *result = nullptr;
Node *current = nullptr;
int carry = 0;
while (num1 != nullptr || num2 != nullptr || carry != 0)
{
int sum = carry;
if (num1 != nullptr)
{
sum += num1->data;
num1 = num1->next;
}
if (num2 != nullptr)
{
sum += num2->data;
num2 = num2->next;
}
carry = sum / 10;
sum %= 10;
Node *newNode = new Node(sum);
if (result == nullptr)
{
result = newNode;
current = newNode;
}
else
{
current->prev = newNode;
newNode->next = current;
current = newNode;
}
}
return result;
}
void printList(Node *head)
{
if (head == nullptr)
{
cout << "Empty list" << endl;
return;
}
while (head != nullptr)
{
cout << head->data;
head = head->next;
}
cout << endl;
}
void deleteList(Node *head)
{
while (head != nullptr)
{
Node *temp = head;
head = head->next;
delete temp;
}
}
int main()
{
int num1 = 12345;
int num2 = 6789;
Node *list1 = createList(num1);
Node *list2 = createList(num2);
cout << "Number 1: ";
printList(list1);
cout << "Number 2: ";
printList(list2);
Node *sumList = addTwoNumbers(list1, list2);
cout << "Sum: ";
printList(sumList);
deleteList(list1);
deleteList(list2);
deleteList(sumList);
return 0;
}
```
### 思路
1. 创建一个双向链表的节点类,该类应包含一个数据成员和两个指针,分别指向前一个节点和后一个节点。
2. 创建一个双向链表类,该类应包含指向链表头部和尾部的指针。
3. 实现链表的插入操作,用于将数据节点插入到链表的末尾。
4. 创建两个双向链表对象,分别表示要相加的两个数。
5. 将两个数分别按位插入到对应的链表中。
6. 从链表的尾部开始,逐位相加,并保留进位。
7. 将相加的结果生成一个新的链表,作为最终的结果。