两数相加 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链表
    }
};
相关推荐
Mem0rin2 小时前
前缀和:一维与二维
数据结构·算法
鱼子星_2 小时前
【C++】stack和queue的应用及其模拟实现:适配器与容器适配器
数据结构·c++·笔记·stl
白狐_7982 小时前
408数据结构第6章:图——核心考点、算法对比与AOE网真题
数据结构·算法
Navigator_Z2 小时前
LeetCode //C - 1187. Make Array Strictly Increasing
c语言·算法·leetcode
白狐_7983 小时前
408数据结构第6章:迪杰斯特拉(Dijkstra)算法——真题精讲
数据结构·算法
皓月斯语3 小时前
P2858 [USACO06FEB] Treats for the Cows G/S
数据结构·c++·算法·动态规划
白白白小纯3 小时前
树和二叉树(1)
数据结构
旖旎夜光4 小时前
LeetCode 397:整数替换(贪心问题) —— 题解
数据结构·c++·算法·leetcode·贪心算法
bbq粉刷匠4 小时前
ArrayList 整体认识
java·jvm·数据结构
wabs6665 小时前
关于哈希表【力扣1.两数之和的思考】
数据结构·算法·leetcode·散列表·图论