首页 > 代码库 > [LeetCode] Add Two Numbers 两个数字相加

[LeetCode] 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) {        ListNode *res = new ListNode(0);        ListNode *cur = res;        int carry = 0;        while (l1 || l2) {            int n1 = l1 ? l1->val : 0;            int n2 = l2 ? l2->val : 0;            int sum = n1 + n2 + carry;            if (sum > 9) {                carry = 1;                sum -= 10;            }            else carry = 0;            cur->next = new ListNode(sum);            cur = cur->next;            if(l1) l1 = l1->next;            if(l2) l2 = l2->next;        }        if (carry == 1) cur->next = new ListNode(1);        return res->next;    }};

 

[LeetCode] Add Two Numbers 两个数字相加