From 479428f81840d7536a56316b84c4511de3214dba Mon Sep 17 00:00:00 2001 From: YOGESH BHAKHAR <31646304+yogesh-mca17du@users.noreply.github.com> Date: Wed, 23 Oct 2019 12:28:04 +0530 Subject: [PATCH] Create add two numbers --- C++/add two numbers | 57 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 C++/add two numbers diff --git a/C++/add two numbers b/C++/add two numbers new file mode 100644 index 00000000..83c79ada --- /dev/null +++ b/C++/add two numbers @@ -0,0 +1,57 @@ +// Source : https://oj.leetcode.com/problems/add-two-numbers/ +/********************************************************************************** +* +* You are given two linked lists representing two non-negative numbers. +* 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. +* +* Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) +* Output: 7 -> 0 -> 8 +* +**********************************************************************************/ + +/** + * Definition for singly-linked list. + * struct ListNode { + * int val; + * ListNode *next; + * ListNode(int x) : val(x), next(NULL) {} + * }; + */ +class Solution { + +public: + ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { + int x=0, y=0, carry=0, sum=0; + ListNode *h=NULL, **t=&h; + + while (l1!=NULL || l2!=NULL){ + x = getValueAndMoveNext(l1); + y = getValueAndMoveNext(l2); + + sum = carry + x + y; + + ListNode *node = new ListNode(sum%10); + *t = node; + t = (&node->next); + + carry = sum/10; + } + + if (carry > 0) { + ListNode *node = new ListNode(carry%10); + *t = node; + } + + return h; + } +private: + int getValueAndMoveNext(ListNode* &l){ + int x = 0; + if (l != NULL){ + x = l->val; + l = l->next; + } + return x; + } +};