LeetCode Add Two Numbers

LeetCode Add Two Numbers

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

此题有几个地方需要注意:
1、两个节点数值相加,和可能大于10,则需要把进位保存下来,供下个节点。
2、链表长度并不一致,需要判断是否是链表末尾。如果是末尾,是否有进位需要考虑。是一个链表的末尾,此时需要把进位(如果有)加到另一个链表末端

ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) 
{
	if(l1==NULL && l2==NULL)
		return NULL;

	ListNode* root = l1, *pre=l1;
	//add表示进位
	int add = 0;

	while (l1 && l2)
	{
		//sum临时存储和:两链表节点的和+进位
		int sum = l1->val + l2->val + add;
		add = sum/10;
		l1->val = sum%10;
		//pre保存当前遍历节点的前一节点,方便后面新增节点插入
		pre = l1==NULL?l2:l1;
		l1 = l1->next;
		l2 = l2->next;
	}
	//链表长度一致,都走到末尾
	if(l1==NULL && l2==NULL)
	{
		while (add > 0)
		{//虽然链表都到末尾,但是可能还有进位,此时需要新增节点来加入进位
			ListNode* tmp = new ListNode(add);
			tmp->next = NULL;

			pre->next = tmp;
			pre = pre->next;
			add/=10;
		}
	}
	else
	{
		//将p指向未到末尾的链表
		ListNode* p = l1==NULL?l2:l1;
		//有进位或者还有链表没有遍历到末尾
		while(add>0 || p)
		{
			int sum = 0;
			if(p != NULL)
				sum = p->val + add;
			else
				sum = add;

			add = sum/10;

			ListNode* tmp = new ListNode(sum%10);
			tmp->next = NULL;
			pre->next = tmp;
			pre = pre->next;

			if(p != NULL)
				p = p->next;
			//没有进位了,没有必要再新增节点,直接break,然后把p接入即可
			if(add == 0)
				break;
		}

		if(add == 0)
			pre->next = p;
	}

	return root;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值