zoukankan      html  css  js  c++  java
  • 2. Add Two Numbers

    Question:
    You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.

    You may assume the two numbers do not contain any leading zero, except the number 0 itself.

    Example 1:

    Input: l1 = [2,4,3], l2 = [5,6,4]
    Output: [7,0,8]
    Explanation: 342 + 465 = 807.
    Example 2:

    Input: l1 = [0], l2 = [0]
    Output: [0]
    Example 3:

    Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
    Output: [8,9,9,9,0,0,0,1]

    Constraints:

    The number of nodes in each linked list is in the range [1, 100].
    0 <= Node.val <= 9
    It is guaranteed that the list represents a number that does not have leading zeros.

    Solution:

          /**
          * Definition for singly-linked list.
          * struct ListNode {
          *     int val;
          *     ListNode *next;
          *     ListNode() : val(0), next(nullptr) {}
          *     ListNode(int x) : val(x), next(nullptr) {}
          *     ListNode(int x, ListNode *next) : val(x), next(next) {}
          * };
          */
    class Solution {
    public:
        ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
            ListNode *curcor = new ListNode(0);
            ListNode *temp = curcor;
            int carry = 0;
            while(l1 != NULL || l2 != NULL)
            {
                int num  = 0;
                if(l1 != NULL && l2 != NULL)
                {
                 num = l1->val+l2->val;    
                    l2 = l2->next;
                    l1 = l1->next;
                }else if(l1 == NULL && l2 != NULL)
                {
                    num = l2->val;    
                    l2 = l2->next;
                }else if(l1 != NULL && l2 == NULL)
                {
                    num = l1->val;    
                    l1 = l1->next;
                }
                
                int current = (num+carry)%10;
                ListNode *p = new ListNode(current);
                temp->next =p;
                temp = p;
                carry = (num+carry)/10;
                if(l1 == NULL && l2 == NULL && carry != 0)
                {
                ListNode *p = new ListNode(carry);
                temp->next =p;
                temp = p;
                }
            }
    
            return curcor->next;
        }
    };
    

    题目地址

  • 相关阅读:
    织梦调用所有栏目一级二级三级和无限级栏目输出
    织梦添加自定义独立模型缩略图字段官方的一个BUG
    织梦搜索结果增加dede:type、dede:arclist、dede:channelartlist、dede:tag等标签支持
    织梦搜索指定多个栏目的文档
    POJ 1001
    #207 Div.2 B. Flag Day
    sublime Text 2 配置 C++ 编译环境
    1011. 复数类
    1008. 二哥买期货
    MySQL/mariadb知识点——视图管理语句
  • 原文地址:https://www.cnblogs.com/Pomelos/p/15678093.html
Copyright © 2011-2022 走看看