class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int len1=0,len2=0; ListNode *node1=l1,*node2=l2; while(node1) { ++len1; node1=node1->next; } while(node2) { ++len2; node2=node2->next; } node1=l1;node2=l2; while(len1>len2) { ListNode *node=new ListNode(0); node->next=node2; node2=node; ++len2; } while(len2>len1) { ListNode *node=new ListNode(0); node->next=node1; node1=node; ++len1; } int k=helper(node1,node2); if(k) { ListNode* node=new ListNode(1); node->next=node1; node1=node; } return node1; } int helper(ListNode* l1,ListNode* l2) { if(!l1||!l2) return 0; int k=0; k=helper(l1->next,l2->next); int sum=l1->val+l2->val+k; if(sum>9) { l1->val=sum-10; return 1; } else { l1->val=sum; return 0; } } };