Add Two Numbers

本文介绍了一种链表加法的实现方法,通过C++代码详细解析了如何将两个表示非负整数的逆序链表相加,并返回一个新的链表结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

You are given two linked lists representing two non-negative numbers. 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.


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

Output: 7 -> 0 -> 8

题目的意思就是实现链表的加法

2+5 = 7

4+6 = 1,0 进位

3+4+1=8 (1是进位产生的)

自己加了main函数做测试

#include <iostream>

using namespace std;
//默认关于链表的定义
 struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
 };
class Solution {
public:
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        ListNode rootNode(0);
        ListNode *pCurNode = &rootNode;
        int forward = 0;//进位
        while(l1||l2)
        {
            int v1 = (l1 ? l1->val : 0);
            int v2 = (l2 ? l2->val : 0);
            int sum = v1 + v2 + forward;
            //处理进位
            forward = sum / 10;
            sum = sum % 10;
            ListNode *pNode = new ListNode(sum);
            pCurNode->next = pNode;
            pCurNode = pNode;
            if(l1) l1 = l1->next;
            if(l2) l2 = l2 ->next;
        }
        //处理最后有进位
        if(forward > 0)
        {
            ListNode *pNode = new ListNode(forward);
            pCurNode->next = pNode;
        }
        return rootNode.next;
    }
};

int main()
{
    ListNode l1(2);
    ListNode x2(4);
    ListNode x3(3);
    l1.next = &x2;
    x2.next = &x3;

    ListNode l2(5);
    ListNode y2(6);
    ListNode y3(4);
    l2.next = &y2;
    y2.next = &y3;

    //ListNode l3 = new ListNode(6);
    Solution so;
    ListNode *ret = so.addTwoNumbers(&l1, &l2);
    do{
        cout<<ret->val;
        cout<<" ";
        ret = ret->next;
    }
    while(ret != NULL);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值