题目:
代码(首刷看解析 2024年3月4日):
我这辈子能不能写出那么优美的代码
/**
* 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* dummyHead = new ListNode();
ListNode* cur = dummyHead;
int carry = 0;
while (l1 || l2 || carry) {
int sum = ( l1 ? l1->val : 0) + ( l2 ? l2->val : 0) + carry;
carry = sum / 10;
cur->next = new ListNode(sum % 10);
cur = cur->next;
if (l1) l1 = l1->next;
if (l2) l2 = l2->next;
}
return dummyHead->next;
}
};
代码(二刷自解 2024年4月10日 20min+)
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
// 若不进位,长度相等,相加创建new Node
int flag = 0;//是否进位
ListNode* newHead = new ListNode(0);
ListNode* cur = newHead;
while (l1 || l2 || flag == true) {
// 考虑长度不等
int v1 = 0, v2 = 0;
if (l1) {v1 = l1->val; l1 = l1->next;}
if (l2) {v2 = l2->val; l2 = l2->next;}
// 考虑进位
int val = (v1 + v2 + flag) % 10;
if (v1 + v2 + flag >= 10) flag = 1;
else flag = 0;
cur->next = new ListNode(val);
cur = cur->next;
}
return newHead->next;
}
};
代码(三刷自解 2024年9月8日)
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
bool flag = false;
ListNode* dummyHead = new ListNode();
ListNode* cur = dummyHead;
while (l1 && l2) {
int tmp = l1->val + l2->val + flag;
l1 = l1->next, l2 = l2->next;
if (tmp >= 10) {
tmp %= 10;
flag = true;
} else {
flag = false;
}
ListNode* now = new ListNode(tmp);
cur->next = now;
cur = cur->next;
}
if (l1) {
while (l1) {
int tmp = l1->val + flag;
l1 = l1->next;
if (tmp >= 10) {
tmp %= 10;
flag = true;
} else {
flag = false;
}
ListNode* now = new ListNode(tmp);
cur->next = now;
cur = cur->next;
}
} else {
while (l2) {
int tmp = l2->val + flag;
l2 = l2->next;
if (tmp >= 10) {
tmp %= 10;
flag = true;
} else {
flag = false;
}
ListNode* now = new ListNode(tmp);
cur->next = now;
cur = cur->next;
}
}
if (flag) {
ListNode* now = new ListNode(1);
cur->next = now;
cur = cur->next;
}
return dummyHead->next;
}
};