https://leetcode.com/problems/add-two-numbers/

1. Build a new List:

  1. //32 ms 70.3 MB
  2. /**
  3. * Definition for singly-linked list.
  4. * struct ListNode {
  5. * int val;
  6. * ListNode *next;
  7. * ListNode() : val(0), next(nullptr) {}
  8. * ListNode(int x) : val(x), next(nullptr) {}
  9. * ListNode(int x, ListNode *next) : val(x), next(next) {}
  10. * };
  11. */
  12. class Solution {
  13. public:
  14. ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
  15. ListNode* dummy = new ListNode(-1);
  16. ListNode* curr = dummy;
  17. int carry = 0;
  18. while(l1 || l2){
  19. int a = l1 ? l1->val : 0;
  20. int b = l2 ? l2->val : 0;
  21. curr->next = new ListNode((a + b + carry) % 10);
  22. carry = (a + b + carry) / 10;
  23. l1 = l1 ? l1->next : NULL;
  24. l2 = l2 ? l2->next : NULL;
  25. curr = curr->next;
  26. }
  27. if(carry!=0)
  28. curr->next = new ListNode(1);
  29. return dummy->next;
  30. }
  31. };
  1. # Definition for singly-linked list.
  2. # class ListNode(object):
  3. # def __init__(self, val=0, next=None):
  4. # self.val = val
  5. # self.next = next
  6. class Solution(object):
  7. def addTwoNumbers(self, l1, l2):
  8. """
  9. :type l1: ListNode
  10. :type l2: ListNode
  11. :rtype: ListNode
  12. """
  13. dummy = curr = ListNode(-1)
  14. carry = 0
  15. while l1 or l2 or carry:
  16. v1 = v2 = 0
  17. if l1:
  18. v1 = l1.val
  19. l1 = l1.next
  20. if l2:
  21. v2 = l2.val
  22. l2 = l2.next
  23. nval = v1 + v2 + carry
  24. if nval >= 10:
  25. carry = 1
  26. else:
  27. carry = 0
  28. curr.next = ListNode(nval % 10)
  29. curr = curr.next
  30. return dummy.next
  1. /**
  2. * Definition for singly-linked list.
  3. * type ListNode struct {
  4. * Val int
  5. * Next *ListNode
  6. * }
  7. */
  8. func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
  9. dummy := &ListNode{}
  10. curr := dummy
  11. carry := 0
  12. for ;(l1 != nil || l2 != nil || carry > 0); curr = curr.Next{
  13. if l1 != nil{
  14. carry += l1.Val
  15. l1 = l1.Next
  16. }
  17. if l2 != nil{
  18. carry += l2.Val
  19. l2 = l2.Next
  20. }
  21. curr.Next = &ListNode{carry % 10, nil}
  22. /*
  23. if carry >= 10 {
  24. carry = 1
  25. } else {
  26. carry = 0
  27. }
  28. */
  29. carry /= 10
  30. }
  31. return dummy.Next
  32. }