链表求和(容易)

开始自己写错了,参考别人的写出来的
/*
你有两个用链表代表的整数,其中每个节点包含一个数字。
数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。
写出一个函数将两个整数相加,用链表形式返回和
*/
// Definition for singly-linked list.
 struct ListNode {
     int val;
     ListNode *next;
     ListNode(int x) : val(x), next(NULL) {}
 };
class Solution
{
public:
	/**
	* @param l1: the first list
	* @param l2: the second list
	* @return: the sum list of l1 and l2
	*/
	ListNode *addLists(ListNode *l1, ListNode *l2)
	{
		// write your code here
		if (l1 == NULL)
		{
			return l2;
		}
		if (l2 == NULL)
		{
			return l1;
		}
		ListNode* head = new ListNode(0);
		ListNode*p = head;
		int temp = 0; 
		int temp1 = 0;
		while ((l1!=NULL)&&(l2!=NULL))
		{
			temp = l1->val + l2->val+temp1;
			temp1 = temp / 10;
			temp = temp % 10;
			p->next = new ListNode(temp);
			p = p->next;
			l1 = l1->next;
			l2 = l2->next;
		}
		while (l1!=NULL)
		{
			temp = l1->val + temp1;
			temp1 = temp / 10;
			temp = temp % 10;
			p->next = new ListNode(temp);
			p = p->next;
			l1 = l1->next;
		}
		while (l2 != NULL)
		{
			temp = l2->val + temp1;
			temp1 = temp / 10;
			temp = temp % 10;
			p->next = new ListNode(temp);
			p = p->next;
			l2 = l2->next;
		}
		if (temp1 != 0)
		{
			p->next = new ListNode(temp1);
			p = p->next;
		}
		return head->next;
	}
};
int main()
{
	ListNode* temp1=NULL;
	ListNode* temp2 = NULL;
	temp1 = new ListNode(3);
	temp1->next = new ListNode(1);
	temp1->next->next = new ListNode(5);
	temp2 = new ListNode(5);
	temp2->next = new ListNode(9);
	temp2->next->next = new ListNode(2);
	ListNode* temp3 = NULL;
	Solution a; 
	temp3=a.addLists(temp1, temp2);
	cout << temp3->val << endl;
	cout << temp3->next->val << endl;
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值