class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
//nullptr下一个节点的地址为空
//如果我们的编译器是支持nullptr的话,那么我们应该直接使用nullptr来替代NULL的宏定义。
//正常使用过程中他们是完全等价的。
ListNode *head = nullptr, *tail = nullptr;
int carry = 0;
//l1或者l2不等于空,执行下面
while (l1 || l2) {
//三目运算符 判断l1 || l2是否为0 ,如果不为空,把链表的数据域赋值给n1、n2
int n1 = l1 ? l1->val: 0;
int n2 = l2 ? l2->val: 0;
int sum = n1 + n2 + carry;
if (!head) {//头结点为空执行,相当于新建了一个链表,头部和尾部一样
head = tail = new ListNode(sum % 10);
}
else {//头结点不为空执行,在新建的链表头部的下一个区域,填入新的元素
tail->next = new ListNode(sum % 10);
//更新下一个区域
tail = tail->next;
}
carry = sum / 10;
\\l1不为空执行,访问下一个节点
if (l1) {
l1 = l1->next;
}
\\l2不为空执行,访问下一个节点
if (l2) {
l2 = l2->next;
}
}
if (carry > 0) {
//最高位还有进位
tail->next = new ListNode(carry);
}
return head;
}
};
LeetCode002 两数相加
最新推荐文章于 2024-07-15 22:27:12 发布