思路 讲述看到这一题的思路 解法很常规,就是将两个结点的值相加即可,难点在于:
- 需要判断进位的问题
- 及链表长度不一的情况
解题方法 描述你的解题方法 链表进位问题:{ 计算结点值:使用sum%10; 储存进位值:sum/10;}
链表长度不一致的问题: while (l1 || l2 || carry) { // 当l1、l2不为空或者还有进位时继续循环
作者:JiaPeng Cai 链接:leetcode.cn/problems/ad… 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode(0); // 创建一个虚拟节点作为头节点
ListNode* curr = dummy; // 当前节点指针
int carry = 0; // 进位
while (l1 || l2 || carry) { // 当l1、l2不为空或者还有进位时继续循环
int sum = carry; // 当前位的和等于进位值
if (l1) {
sum += l1->val; // 加上l1当前节点的值
l1 = l1->next; // l1指针后移
}
if (l2) {
sum += l2->val; // 加上l2当前节点的值
l2 = l2->next; // l2指针后移
}
carry = sum / 10; // 计算进位
curr->next = new ListNode(sum % 10); // 创建新节点存储当前位的值
curr = curr->next; // 当前节点指针后移
}
return dummy->next; // 返回虚拟节点的下一个节点,即为相加后的链表
}
};