【Leetcode】【Add Two Numbers】【两数相加】【C++】

  • 题目: 给定两个非空表示非负数的链表,数字以逆序存储且每个结点存储一个数字,求这两个非负数的和,以链表返回;
  • 说明: 注意考虑到进位,以及链表计算完毕后的进位。如 5+5 不等于0,而等于0->1;
  • 思路:按照链表格式从左到右相加即可,注意进位,以及链表长度不一致导致的单个数相加。
  • 代码:
    /**
     * 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 cur=0;
            int c=0;
            ListNode* root=new ListNode(0);
            ListNode* res=root;
            while(l1 && l2)
            {
                res->next=new ListNode(0);
                res=res->next;
                
                cur=c+l1->val+l2->val;
                c=cur/10;
                cur=cur%10;
                
                res->val=cur;
                l1=l1->next;
                l2=l2->next;
            }
            while(l1)
            {
                res->next=new ListNode(0);
                res=res->next;
                
                cur=c+l1->val;
                c=cur/10;
                cur=cur%10;
                
                res->val=cur;
                l1=l1->next; 
            }
            while(l2)
            {
                res->next=new ListNode(0);
                res=res->next;
                
                cur=c+l2->val;
                c=cur/10;
                cur=cur%10;
                
                res->val=cur;
                l2=l2->next; 
            }
            while(c)
            {
                res->next=new ListNode(0);
                res=res->next;
                
                cur=c;
                c=cur/10;
                cur=cur%10;
                
                res->val=cur;
            }
            return root->next;
        }
    };

猜你喜欢

转载自www.cnblogs.com/dreamer123/p/9153652.html