📅  最后修改于: 2023-12-03 15:13:48.245000             🧑  作者: Mango
在计算中,我们经常需要将两个数字相加。在某些情况下,数字可能非常大,以至于超出了计算机可以表示的整数范围。在这种情况下,我们可以使用链表来表示数字并计算它们的和。
链表是一种数据结构,用于存储和操作元素的集合。每个元素称为节点,并包含1)表示数据的值和2)连接到下一个节点的指针。链表可以用于表示数字,其中每个节点来代表数字的一位。
链表有许多类型,其中较常见的是单链表、双链表和循环链表。下面是单链表的结构体的定义:
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
以上代码片段说明了单链表节点的结构体:每个节点由值
和指向下一节点
的指针组成。其中,*next
指针可以为空,从而表示链表尾部。
为了将两个链表表示的数字相加,我们需要执行以下步骤:
next
指针,它将指向新链表的第一个节点。ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *head = new ListNode(-1);
ListNode *curr = head;
int carry = 0;
while (l1 || l2 || carry) {
int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;
carry = sum / 10;
curr->next = new ListNode(sum % 10);
curr = curr->next;
l1 = l1 ? l1->next : NULL;
l2 = l2 ? l2->next : NULL;
}
return head->next;
}
-1
,因为我们不会用到它的值。同时,我们也创建另外两个指针curr
和carry
,用于遍历链表和计算进位。next
指针,它将指向新链表的第一个节点。使用链表相加两个数字可能有一些难点,但是如果我们按照上述步骤操作,就可以轻松地完成它。在实现代码时,我们要记得一些重要的锚点,如链表的头节点和尾节点,以及我们需要跟踪的进位。