2两数相加
下面展示一些 内联代码片
。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* sumhead = nullptr; // 初始化头指针为nullptr
ListNode* current = nullptr; // 初始化当前节点为nullptr
int c = 0; // 进位标志
// 遍历两个链表,进行加法运算
while (l1 != nullptr || l2 != nullptr || c > 0) {
int x = (l1 != nullptr) ? l1->val : 0;
int y = (l2 != nullptr) ? l2->val : 0;
int tempSUM = x + y + c;
// 处理进位
if (tempSUM >= 10) {
c = 1;
tempSUM -= 10;
} else {
c = 0;
}
// 如果sumhead是nullptr,说明这是第一个节点
if (!sumhead) {
sumhead = new ListNode(tempSUM);//动态分配新节点
current = sumhead;
} else {
// 否则,在current后面添加新节点
current->next = new ListNode(tempSUM);
current = current->next;
}
// 更新链表指针
if (l1 != nullptr) l1 = l1->next;
if (l2 != nullptr) l2 = l2->next;
}
return sumhead;
}
};