Add Two Numbers (c++)

来源:互联网 发布:淘宝照片修图教程 编辑:程序博客网 时间:2024/06/06 07:15


题目:

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) {        if(l1==NULL&&l2==NULL)        return NULL;        ListNode *res = new ListNode(0);        ListNode *join_Node = res;                ListNode *L1 = l1;        ListNode *L2 = l2;        int overflow = 0; //进位值                while(L1!=NULL&&L2!=NULL)//都非空时运算        {            int sum = overflow+L1->val+L2->val;            overflow = sum/10;            join_Node->next = new ListNode(sum%10);            join_Node = join_Node->next;                        L1 = L1->next;            L2 = L2->next;         }                ListNode *L_rem=L1?L1:L2;//有链表遍历完了 对剩下的处理        while(L_rem!=NULL)        {            int sum = overflow+L_rem->val;            overflow = sum/10;            join_Node->next = new ListNode(sum%10);            join_Node = join_Node->next;            L_rem = L_rem->next;        }        if(overflow>0)        join_Node->next = new ListNode(overflow);                join_Node = res;        res = res->next; //第一个元素去除掉        return res;            }};





0 0