```cpp
include include include using namespace std; // 定义双向链表结点结构 struct Node { int data; Node* prev; Node* next; }; // 向链表中添加新节点 void addNode(Node head, int data) { Node* newNode = new Node(); newNode->data = data; newNode->prev = nullptr; newNode->next = nullptr; if (*head == nullptr) { *head = newNode; return; } Node* temp = *head; while (temp->next != nullptr) { temp = temp->next; } temp->next = newNode; newNode->prev = temp; } // 从链表中移除节点 void removeNode(Node if (node->prev != nullptr) { node->prev->next = node->next; } else { *head = node->next; } if (node->next != nullptr) { node->next->prev = node->prev; } delete node; } // 将链表转换为字符串 string链表ToString(Node* head) { string result = ""; Node* temp = head; while (temp != nullptr) { result += to_string(temp->data); temp = temp->next; } return result; } // 实现长整数加法 string addLongIntegers(string num1, string num2) { Node* head1 = nullptr; Node* head2 = nullptr; // 将输入字符串转换为链表 for (char c : num1) { addNode(&head1, c - '0'); } for (char c : num2) { addNode(&head2, c - '0'); } // 处理前导零 while (head1 != nullptr && head1->data == 0) { removeNode(&head1, head1); } while (head2 != nullptr && head2->data == 0) { removeNode(&head2, head2); } // 计算结果 string result; Node* temp1 = head1; Node* temp2 = head2; int carry = 0; while (temp1 != nullptr || temp2 != nullptr || carry != 0) { int sum = carry; if (temp1 != nullptr) { sum += temp1->data; temp1 = temp1->next; } if (temp2 != nullptr) { sum += temp2->data; temp2 = temp2->next; } result += to_string(sum % 10); carry = sum / 10; } // 移除结果中的前导零 while (result.size() > 1 && result == '0') { result.erase(result.begin()); } return result; } int main() { string num1, num2; cout << "请输入第一个长整数(每四位一组,组间用逗号隔开): "; getline(cin, num1); cout << "请输入第二个长整数(每四位一组,组间用逗号隔开): "; getline(cin, num2); string result = addLongIntegers(num1, num2); cout << "两个长整数的和为: " << result << endl; return 0; } ``` 代码说明: 定义了双向链表的结点结构,包含数据成员`data`,指向前驱结点的指针`prev`和指向后继结点的指针`next`。 向链表中添加新节点。 从链表中移除节点。 将链表转换为字符串。 addNode结构体:
addNode函数:
removeNode函数:
链表ToString函数: