LeetCode---两数相加

题目:

在这里插入图片描述

官方答案(c++):

class Solution {
public:
	ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
		ListNode* dummyHead=new ListNode(0);
		ListNode* p=l1,*q=l2,*curr=dummyHead;
        int carry=0;
        while(p!= NULL || q!=NULL)
        {
            int x=(p!=NULL)?p->val:0;//根据检测结果输入
            int y=(q!=NULL)?q->val:0;
            int sum=carry+x+y;
            carry=sum/10;
            curr->next=new ListNode(sum%10);
            curr=curr->next;
            if(p!=NULL) p=p->next;//检测数据长短
            if(q!=NULL) q=q->next;
        }
        if(carry>0)
        {
            curr->next=new ListNode(carry);
        }
        return dummyHead->next;
	}
};

结果:

在这里插入图片描述
原本自己想要用递归进行操作,后面发现不行,无法解决数据长短不一或者最高位相加发生进位的情况。

#include<iostream>
#include<vector>

struct ListNode {
      int val;
      ListNode *next;
      ListNode(int x) : val(x), next(NULL) {}
	  ListNode(int x, ListNode *father):val(x),next(father)  {}
};
 
class Solution {
public:
	std::vector<int> tmp = {0};
	int i = 0;
	ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
		ListNode* result=new ListNode(0);
		
		tmp.push_back((l1->val + l2->val)/10);
		std::cout << tmp[i] << std::endl;	
		i++;
		if (NULL != l1->next && NULL != l2->next)
		{
			result->next = addTwoNumbers(l1->next, l2->next);
		}		
		result->val = (tmp[--i] + l1->val + l2->val) % 10;
		return result;
	}
};

int main()
{
	Solution solution;
	ListNode *result;

	ListNode *a1 = new ListNode(3);
	ListNode *a2 = new ListNode(2,a1);
	ListNode *a3 = new ListNode(4,a2);

	ListNode *b1 = new ListNode(4);
	ListNode *b2 = new ListNode(3, b1);
	ListNode *b3 = new ListNode(6, b2);

	result=solution.addTwoNumbers(a3,b3);

	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值