2. 两数相加
- 这道题可以采用递归也可以采用循环的方式解答
- 由于有进位,使用一个变量记录
- 当链表到达尽头,另一条的链表不一定到达尽头,进位也未必为0,这里采用三目运算符进行处理。
C++版本:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void recursion(ListNode* p, ListNode* l1, ListNode* l2, int flag){
if(l1 || l2 || flag){
int m1 = l1? l1->val:0;
int m2 = l2? l2->val:0;
int sum = m1+m2+flag;
ListNode* next = new ListNode(sum%10);
p->next = next;
l1 = l1? l1->next:l1;
l2 = l2? l2->next:l2;
recursion(p->next, l1, l2, sum/10);
}
}
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode vHead(0), *p = &vHead;
recursion(p, l1, l2, 0);
return vHead.next;
}
};
python3版本:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def recursion(self, ans: ListNode, l1: ListNode, l2: ListNode, flag:int):
if l1 or l2 or flag:
num1 = l1.val if l1 else 0
num2 = l2.val if l2 else 0
sum = num1+num2+flag
node = ListNode(sum%10)
ans.next = node
l1 = l1.next if l1 else l1
l2 = l2.next if l2 else l2
self.recursion(ans.next, l1, l2, sum//10)
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
ans = ListNode(0)
self.recursion(ans, l1, l2, 0)
return ans.next
如果对你有帮助的话,请点个赞哦!