📅  最后修改于: 2023-12-03 15:40:54.786000             🧑  作者: Mango
在这篇文章中,我们将介绍用于添加由链表表示的两个数字的 C 程序。这是链表的第二集,如果您还没有阅读过第一集,请先移步 用于表示数字的链表的 C 程序 - 集 1 。
给定两个用链表表示的非负数,其中每个节点包含一个数字,请将两数相加并以链表的形式返回。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
我们可以采取与第一节列举的思路相同,从头到尾遍历两个链表,同时将两个节点的值相加,并将结果保存到新链表中。值得注意的是,在添加新节点时,为了防止悬挂指针,必须保证链表节点的内存分配是连续的。
算法步骤:
接下来,我们将按照 C 语言的语法,编写一个解决这个问题的程序。具体代码片段如下:
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode dummy;
struct ListNode* tail = &dummy;
int carry = 0;
while (l1 || l2 || carry) {
int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;
carry = sum / 10;
tail->next = malloc(sizeof(struct ListNode));
tail = tail->next;
tail->val = sum % 10;
l1 = l1 ? l1->next : NULL;
l2 = l2 ? l2->next : NULL;
}
tail->next = NULL;
return dummy.next;
}
这是一个用于添加由链表表示的两个数字的简单 C 程序。我们通过一个简单的步骤,实现了从头到尾遍历两个链表,同时将节点的值相加的过程,并将结果保存在新链表中,最后返回新链表。
感谢您的阅读!