Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagecpp
titletwonumbers.cpp
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */

#define MSELECTMNEXT(A,B) (A?(A:(B?B->next?A->next:NULL):NULL)
#define MSELECTNEXTMSELECT(A,B) (A?A->next:(B?B->next:NULL))

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        if (!l1 && !l2) return NULL;
        
        ListNode *n=new ListNode(0);
        if (l1) n->val+=l1->val;
        if (l2) n->val+=l2->val;
        if (n->val>9)
        {
            ListNode *next;
            next=MSELECTNEXT(l1,MNEXT(l1);
            if (!next) next=MNEXT(l2);
            
            if (next) // next node(s) exists, so hand over 1 to next digit
            {
              next->val += 1;    
            }
            else // no next node found, so create new node with initial value=1
            {
 ListNode *nc=new ListNode(1);
                ListNode *p=MSELECT(l1,l2);
                p->next=ncnew ListNode(1);
            }
            n->val -=10;            
        }
        if (MSELECTMNEXT(l1,) || MNEXT(l2))
            n->next = addTwoNumbers(MNEXT(l1?l1->next:NULL), MNEXT(l2?l2->next:NULL));
 else n->next =NULL;
       return n;
    }
};

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

...