LeetCode.2 (ajouter deux nombres) - moyen

LeetCode.2 (ajouter deux nombres) - moyen

  • Deux listes chaînées non vides sont données pour représenter deux entiers non négatifs. Parmi eux, leurs chiffres respectifs sont stockés dans l'ordre inverse, et chacun de leurs nœuds ne peut stocker qu'un seul chiffre. Si nous additionnons ces deux nombres ensemble, une nouvelle liste chaînée sera retournée pour représenter leur somme. Vous pouvez supposer qu'à l'exception du nombre 0, aucun de ces nombres ne commencera par 0.

    Exemples:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807
    
  • Code:

    //2020_4_17
    /**
     * 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;//结果链表指针
            int carry = 0;//进位
            int sum = 0;//对应位的和
            sum += l1 ? l1->val : 0;//求和,如果为NULL则加0
            sum += l2 ? l2->val : 0;
            sum += carry;
            ListNode *temp = new ListNode(sum % 10);//由于该链表无头节点,故第一次挪出循环外
            res = temp;
            carry = sum / 10;
            l1 = l1 ? l1->next : NULL;//下一位,如果没有就至NULL
            l2 = l2 ? l2->next : NULL;//下一位,如果没有就至NULL
            while (l1 || l2 || carry)//只要进位为1或者还有数没加循环
            {
                sum = 0;
                sum += l1 ? l1->val : 0;
                sum += l2 ? l2->val : 0;
                sum += carry;
                temp->next = new ListNode(sum % 10);
                carry = sum / 10;
                l1 = l1 ? l1->next : NULL;
                l2 = l2 ? l2->next : NULL;
                temp = temp->next;
            }
            return res;
        }
    };
    
  • Le résultat:

Je suppose que tu aimes

Origine www.cnblogs.com/iceix/p/12719558.html
conseillé
Classement