两数相加 II

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

示例1:

复制代码
输入:l1 = [7,2,4,3], l2 = [5,6,4]
输出:[7,8,0,7]

示例2:

复制代码
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[8,0,7]

示例3:

复制代码
输入:l1 = [0], l2 = [0]
输出:[0]

代码如下:

cpp 复制代码
//反转链表+两数相加
class Solution {
public:
    ListNode* reverse(ListNode* head)//反转链表
    {
        ListNode* curr=head;
        ListNode* prev=nullptr;
        while(curr!=nullptr)
        {
            ListNode* temp=curr->next;
            curr->next=prev;
            prev=curr;
            curr=temp;
        }
        return prev;
    }
    ListNode* addsum(ListNode* l1, ListNode* l2)//两数相加
    {
       ListNode* prev=new ListNode(0);//定义一个头节点之前的节点,为预先节点,防止在遍历的过程中丢失头节点
        ListNode* curr=prev;//定义cur指针指向pre
        int carry=0;//进位
        while(l1!=nullptr||l2!=nullptr)
        {
            int x=l1==nullptr?0:l1->val;//当l1为null时,让l1补0,否则取l1的值
            int y=l2==nullptr?0:l2->val;//当l2为null时,让l2补0,否则取l2的值

            int sum=x+y+carry;//加上进位之后此时的和
            carry=sum/10;//获得进位
            sum=sum%10;//进位之后剩下的数字,余数
            curr->next=new ListNode(sum);//创建新的链表,将余数存进新的链表里
            curr=curr->next;//循环新链表

            if(l1!=nullptr)
            {
                l1=l1->next;//遍历l1链表
            }
            if(l2!=nullptr)
            {
                l2=l2->next;//遍历l2链表
            }
        }
        if(carry==1)
        {
            curr->next=new ListNode(carry);//当l1和l2都遍历完成之后,此时进位为1,开辟一个新的节点存放进位
        }
        return prev->next;//返回pre的下一个节点为新链表的头节点

    }
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        l1=reverse(l1);//反转l1链表
        l2=reverse(l2);//反转l2链表
        ListNode* l3=addsum(l1,l2);//将反转后的两个链表相加得到l3
        return reverse(l3);//反转l3链表
    }
};
相关推荐
闪电麦坤955 分钟前
Leecode热题100:环形链表(链表)
数据结构·链表·leecode
Remember_99311 分钟前
【LeetCode精选算法】双指针专题一
java·数据结构·算法·leetcode
多米Domi01113 分钟前
0x3f 第36天 外卖8,9,树
数据结构·python·算法·leetcode
程序员-King.20 分钟前
day153—回溯—子集(LeetCode-78)
算法·leetcode·回溯·递归
HelloWorld1024!41 分钟前
C++中链表的虚拟头结点:应用场景与使用时机
网络·c++·链表
wen__xvn1 小时前
代码随想录算法训练营DAY20第六章 二叉树part07
数据结构·算法·leetcode
ValhallaCoder1 小时前
Day50-图论
数据结构·python·算法·图论
Shirley~~1 小时前
leetcode二分法
数据结构·算法·leetcode
Swift社区1 小时前
LeetCode 378 有序矩阵中第 K 小的元素
算法·leetcode·矩阵
期货资管源码1 小时前
智星期货资管子账户软件pc端开发技术栈的选择
c语言·数据结构·c++·vue