两数相加 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链表
    }
};
相关推荐
爱跳舞的烤冷面3 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
MC皮蛋侠客4 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
疯狂打码的少年4 小时前
【数据结构】队列:定义、顺序队列与链式队列
数据结构·笔记
蔬菜_5 小时前
前端转全栈-day5(数组、list、set)
java·前端·数据结构·list
CV-X.WANG7 小时前
从零理解 ORB-SLAM3(二):系统全景、执行上下文与核心数据结构
数据结构
Doraemomo7 小时前
数据结构-二叉树
数据结构
爱跳舞的烤冷面7 小时前
自学嵌入式第20天(数据结构篇——队列)
数据结构
evans在进步7 小时前
LeetCode 200:岛屿数量——Java DFS 染色法详解
java·leetcode·深度优先
旖旎夜光8 小时前
LeetCode 202:快乐数(双指针问题) —— 题解
数据结构·c++·算法·leetcode·双指针
cpp_25018 小时前
P1113 [USACO02FEB] 杂务
数据结构·c++·算法·动态规划·图论·拓扑排序·洛谷题解