You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
题目大意:用链表存储数据,模拟加法运算;
注意:
1.进位,尤其是两个数最高位加完后,可能存在进位
2.两个列表长度问题
3.LeetCode的链表一般均为不带头结点,为了方便操作,可以自己添加一个头结点,最后返回ans>next
C++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int c = 0, temp;
ListNode *p = l1, *q = l2, *ans = new ListNode(0), *k = ans;
while(p != nullptr && q != nullptr){
temp = (p->val + q->val + c) % 10;
c = (p->val + q->val + c) / 10;
k->next = new ListNode(temp);
k = k->next;
p = p->next;
q = q->next;
}
if(q != nullptr)
p = q;
while(p != nullptr){
temp = (p->val + c) % 10;
c = (p->val + c) / 10;
k->next = new ListNode(temp);
k = k->next;
p = p->next;
}
if(c != 0){
k->next = new ListNode(c);
k = k->next;
}
return ans->next;
}
};
Python
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def addTwoNumbers(self, l1, l2):
p, q, ans = l1, l2, ListNode(0)
k = ans
c = 0
while p and q:
temp = (p.val + q.val + c) % 10
c = (p.val + q.val + c) / 10
k.next = ListNode(temp)
k, p, q = k.next, p.next, q.next
if not p:
p = q
while p:
temp = (p.val + c) % 10
c = (p.val + c) / 10
k.next = ListNode(temp)
k, p = k.next, p.next
if c:
k.next = ListNode(c)
return ans.next