赞
踩
给定两个非空的链表,每个链表表示的是一个逆序的数字。求两个数字之和,以相同形式返回一个链表。
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
原题链接: https://leetcode-cn.com/problems/add-two-numbers/
同步遍历两个链表,按位累加即可。需要注意的是,两个个位数相加有可能产生进位,所以需要考虑进位的情况。
所以每次遍历的时候,假设当前位置两个数分别为 n1,n2,进位数为 carry。则当前位的和为 (n1+n2+carry),则当前位的结果为和除10取余数 (n1+n2+carry)%10,新的进位数为和除10取商(n1+n2+carry)/10。
/** * 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* head = new ListNode(); ListNode* pre = head; int carry = 0; while(l1 || l2 || carry) { int val1 = l1 ? l1->val : 0; int val2 = l2 ? l2->val : 0; int sum = val1 + val2 + carry; ListNode* cur = new ListNode(sum % 10); carry = sum / 10; pre->next = cur; pre = cur; if (l1) { l1 = l1->next; } if (l2) { l2 = l2->next; } } return head->next; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。