2. Add Two Numbers Medium

单链表实现的加法,跟上学期数据结构学过的链表实现多项式加法类似,下面是完整代码,写的比较繁琐委屈

也可以先把两个链表里的数取出来做加法,然后把结果再用链表表示,这样代码短一些,这里懒的写啦~


#include <iostream>  

#include <cstring>
#include <vector> 
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) {
        ListNode * ans = NULL;
        ListNode * p, * q;
        int carry = 0;


        while(l1 != NULL && l2 != NULL){
        int d = l1->val + l2->val + carry;
        carry = d / 10;
        if(ans == NULL){
        ans = new ListNode(d % 10);
        q = ans;
        }
        else {
        p = new ListNode(d % 10);
        q->next = p;
        q = p;
        }
        l1 = l1->next;
        l2 = l2->next;
        }


        while(l1 != NULL){
        int d = l1->val + carry;
        carry = d / 10;
        p = new ListNode(d % 10);
        q->next = p;
        q = p; 
        l1 = l1->next;
        }
        while(l2 != NULL){
        int d = l2->val + carry;
        carry = d / 10;
        p = new ListNode(d % 10);
        q->next = p;
        q = p; 
        l2 = l2->next;
        }
        if(carry){
        p = new ListNode(1); q->next = p;
        }
        return ans;
    }
};  


void createList(ListNode* & l)
{
int digit;
cin >> digit;
if(digit == -1)return ;
l = new ListNode(digit);
createList(l->next);
}
int main()  
{  
    ListNode * head1 = NULL;
    ListNode * head2 = NULL;
    createList(head1);
    createList(head2);
    Solution a;
    ListNode * ans = a.addTwoNumbers(head1, head2);


    while(ans != NULL){
    cout << ans->val; ans = ans->next;
    }
    return 0;  

}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值