Leetcode刷题-002两数相加

#include<iostream>
using namespace std;
#include<list>

 //Definition for singly-linked list.
 struct ListNode {
     int val;
     ListNode *next;
	 ListNode(int x) { val = x; }
 /*    ListNode(int x) : val(0), next(nullptr) {}
     ListNode(int x) : val(x), next(nullptr) {}
     ListNode(int x, ListNode *next) : val(x), next(next) {}*/
};

class Solution {
public:
	ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
		ListNode *pre = new ListNode(0);
		ListNode *cur = pre;
		int carry = 0;
		while (l1 != NULL || l2 != NULL){
			int x = l1 == NULL ? 0 : l1->val;
			int y = l2 == NULL ? 0 : l2->val;
			int sum = x + y + carry;
			carry = sum / 10;
			cur->next = new ListNode(sum % 10);
			cur = cur->next;

			if (l1 != NULL) {
				l1 = l1->next;
			}
			if (l2 != NULL) {
				l2 = l2->next;
			}
		}
		if (carry == 1) {
			cur->next = new ListNode(1);
		}
		return pre->next;
	}
};

ListNode* NUM(char num[], int size) {

	ListNode *L1 = new ListNode(NULL);
	ListNode *pre = L1;
	for (int i = 0; i < sizeof(num); i++)
	{
		ListNode *p = new ListNode(NULL);
		p->val = num[i];

		pre->next = p;
		pre = p;
		p->next = NULL;
	}
	return L1->next;
}

void print(ListNode *L) {
	for (int i = 0; i < 3; i++)
	{
		cout << L->val << endl;
		L = L->next;
	}
}

void test01() {
	char num1[] = { 2,4,3 };
	char num2[] = { 5,6,4 };
	int m_size1 = sizeof(num1);
	int m_size2 = sizeof(num2);

	ListNode *L1 = NUM(num1, m_size1);
	ListNode *L2 = NUM(num2, m_size2);
	//print(L2);

	Solution S;
	ListNode *L3 = S.addTwoNumbers(L1, L2);
	print(L3);
}


int main()
{
	test01();
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值