• 【LeetCode】Add Two Numbers


    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* newhead = new ListNode(-1);
            ListNode* tail = newhead;
            int carry = 0;
            int sum;
            int val;
            while(l1 != NULL && l2 != NULL)
            {
                sum = l1->val + l2->val + carry;
                val = sum%10;
                carry = sum/10;
                tail->next = new ListNode(val);
                tail = tail->next;
                
                l1 = l1->next;
                l2 = l2->next;
            }
            if(l1 == NULL)
            {
                if(l2 == NULL)
                {//l1, l2 == NULL
                    if(carry != 0)
                        tail->next = new ListNode(carry);
                }
                else
                {//l1 == NULL, l2 != NULL
                    while(l2 != NULL)
                    {
                        sum = l2->val + carry;
                        val = sum%10;
                        carry = sum/10;
                        tail->next = new ListNode(val);
                        tail = tail->next;
                        l2 = l2->next;
                    }
                    if(carry != 0)
                        tail->next = new ListNode(carry);
                }
            }
            else
            {//l1 != NULL, that means l2 == NULL
                while(l1 != NULL)
                {
                    sum = l1->val + carry;
                    val = sum%10;
                    carry = sum/10;
                    tail->next = new ListNode(val);
                    tail = tail->next;
                    l1 = l1->next;
                }
                if(carry != 0)
                    tail->next = new ListNode(carry);
            }
            return newhead->next;
        }
    };

  • 相关阅读:
    ubuntu下安装maven
    159.Longest Substring with At Most Two Distinct Characters
    156.Binary Tree Upside Down
    155.Min Stack
    154.Find Minimum in Rotated Sorted Array II
    153.Find Minimum in Rotated Sorted Array
    152.Maximum Product Subarray
    151.Reverse Words in a String
    150.Evaluate Reverse Polish Notation
    149.Max Points on a Line
  • 原文地址:https://www.cnblogs.com/ganganloveu/p/4179793.html
Copyright © 2020-2023  润新知