leetcode 两数相加c++_[LeetCode] [C++] 2. Add Two Numbers 两数相加

题目要求

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 contain a single digit.

Add the two numbers and return it as a linked list.

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

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)

Output: 7 -> 0 -> 8

LeetCode 2在线测试

问题描述

给定两个非空单向链表代表两个非负整数。整数中每一位的数字都逆序存储在链表节点中,求出

这两个非负整数的和并将结果中的数字以相同的逆序方式存储在一个单项链表中。可以不考虑

数字前面的0。

例如:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出 :7 -> 0 -> 8

思路分析

用LinkList代表整数中每一个数字,模拟加法进位的方式进行求和计算。例如:2 -> 4 -> 3

和5 -> 6 -> 4,先计算个位数 2和5的和为7, 十位数 4和6的和为10,逢十进一,则该位的数字

为0,产生一位进位1到百位参与百位的数字求和。那么百位的结果:3 + 4 + 1(这个1就是刚刚十位

相加产生的进位),百位计算结果为8,所以最终返回结果 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* pRoot = NULL;

do {

if (l1 == NULL) {

pRoot = l2;

break;

}

if (l2 == NULL) {

pRoot = l1;

break;

}

int sum = l1->val + l2->val;

int digit = sum % 10;

int carry = sum / 10;

pRoot = new ListNode(digit);

ListNode* pTail = pRoot;

l1 = l1->next;

l2 = l2->next;

while (l1 != NULL || l2 != NULL) {

int sum = ((l1 != NULL) ? l1->val : 0) + ((l2 != NULL) ? l2->val : 0) + carry;

int digit = sum % 10;

carry = sum / 10;

ListNode* pNew = new ListNode(digit);

pTail->next = pNew;

pTail = pNew;

l1 = l1 != NULL ? l1->next : NULL;

l2 = l2 != NULL ? l2->next : NULL;

}

if (carry == 1) {

ListNode* pNew = new ListNode(carry);

pTail->next = pNew;

}

} while (false);

return pRoot;

}

};

总结注意

需要考虑大数情况,所以不能直接用int保存每个LinkList对应的值

考虑 [5] [5] -> [0, 1] 这种单独进位的情况

原创声明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用,题目来源于力扣(LeetCode)的Add Two Numbers问题。根据引用,这是一个关于链表的问题,给定了两个非空的链表,表示两个非负的整数。这两个链表的每个节点都存储了一个逆序的数字,并且每个节点只能存储一位数字。我们需要将这两个数相加,并以相同形式返回一个表示和的链表。除了数字0以外,这两个数不会以0开头。根据引用,这是一道高频题,互联网大厂在笔试和面试中经常会考到这类问题。解决这道题需要基础的数据结构与算法知识,并锻炼解题能力。 问题:leetcode两数相加 回答:这个问题是力扣(LeetCode)上的Add Two Numbers问题,要求计算两个逆序表示的非负整数的和,并返回以相同形式表示的链表。它是一道高频题,经常在互联网大厂的笔试和面试中出现。为了解决这个问题,需要使用链表的基本操作,并且要注意进位的处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [LeetCode高频题2:两数相加](https://blog.csdn.net/weixin_46838716/article/details/125237688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [leetcode两数相加](https://blog.csdn.net/weixin_43199244/article/details/115759341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值