
- 首先肯定是要获取两个链表的长度,遍历一下看单向链表的最优一位是不是NULL。再进行使用高精度加法的模板:
dummy = tail = ListNode(0)
while l1 or l2 or carry:
sum = l1?.val + l2?.val + carry // carry 表示进位
tail1.next = ListNode(sum % 10)
tail = tail.next
carry = sum /= 10
l1, l2 = l1?.next, l2?.next
return dummy.next
- 先创建一个额外增加的头节点,记作dummy,这样就可以对所有节点进行正常的 *** 作,可以发现dummy一直指向的是这个new ListNode(0)。
- 再创建一个tail指针,tail这个指针一直指向的是最后一个节点。
- 用sum来对累加的和进行表示,sum = l1.val + l2.val + carry,carry表示进位。
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode dummy(0);
ListNode* tail = &dummy;
int sum = 0;
while(l1 || l2 || sum){
sum += (l1 ? l1->val : 0) + (l2 ? l2->val : 0);
l1 = l1 ? l1->next : nullptr;
l2 = l2 ? l2->next : nullptr;
tail->next = new ListNode(sum % 10);
sum /= 10;
tail = tail->next;
}
return dummy.next;
}
};
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)