两数相加 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链表
    }
};
相关推荐
琢磨先生David7 天前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
qq_454245037 天前
基于组件与行为的树状节点系统
数据结构·c#
超级大福宝7 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
Charlie_lll7 天前
力扣解题-88. 合并两个有序数组
后端·算法·leetcode
菜鸡儿齐7 天前
leetcode-最小栈
java·算法·leetcode
岛雨QA7 天前
常用十种算法「Java数据结构与算法学习笔记13」
数据结构·算法
weiabc7 天前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法
wefg17 天前
【算法】单调栈和单调队列
数据结构·算法
岛雨QA7 天前
图「Java数据结构与算法学习笔记12」
数据结构·算法
czxyvX7 天前
020-C++之unordered容器
数据结构·c++