单链表ADT模板应用算法设计:长整数加法运算(不使用单链表存储计算结果)
时间: 2024-05-02 15:17:12 浏览: 88
算法设计:
1. 定义单链表的结构体,包含一个整数和一个指向下一个节点的指针。
2. 分别读入两个长整数并将它们存储在两个单链表中。
3. 从两个单链表的头节点开始,依次将每个节点的整数相加,并将结果存储在一个新的单链表中。
4. 对于每个节点的整数相加,需要考虑进位的情况,即若相加结果大于9,则需要向高位进位。
5. 最后得到的单链表即为两个长整数的和,将其输出即可。
伪代码:
```
定义单链表结构体:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
读入两个长整数并将它们存储在两个单链表中:
ListNode* l1 = new ListNode(0);
ListNode* l2 = new ListNode(0);
ListNode* p1 = l1;
ListNode* p2 = l2;
while (x != 0) {
int digit = x % 10;
p1->next = new ListNode(digit);
p1 = p1->next;
x /= 10;
}
while (y != 0) {
int digit = y % 10;
p2->next = new ListNode(digit);
p2 = p2->next;
y /= 10;
}
从两个单链表的头节点开始,依次将每个节点的整数相加,并将结果存储在一个新的单链表中:
ListNode* ans = new ListNode(0);
ListNode* p3 = ans;
p1 = l1->next;
p2 = l2->next;
int carry = 0;
while (p1 != NULL || p2 != NULL) {
int x = (p1 != NULL) ? p1->val : 0;
int y = (p2 != NULL) ? p2->val : 0;
int sum = x + y + carry;
carry = sum / 10;
p3->next = new ListNode(sum % 10);
p3 = p3->next;
if (p1 != NULL) p1 = p1->next;
if (p2 != NULL) p2 = p2->next;
}
if (carry > 0) {
p3->next = new ListNode(carry);
}
输出结果:
p3 = ans->next;
while (p3 != NULL) {
cout << p3->val;
p3 = p3->next;
}
```
注意事项:
1. 在定义单链表结构体时,要考虑到链表的头节点,即第一个节点不存储有效数据。
2. 在节点的整数相加时,需要考虑到两个单链表长度不一致的情况。
阅读全文