LeetCode之2. 两数相加

LeetCode之2. 两数相加

  1. 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
  2. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
  3. 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
       	int i = 0, flag = 0;
		ListNode *lt = new ListNode(0);
		ListNode *head = lt;
		for ( i = 0; l1 != NULL||l2!=NULL||flag==1;i++)
		{
			int sum = 0;

			if (flag == 1)
			{
				sum++;
			}
			
			if (l1==NULL&&l2!=NULL)
			{
			    sum += l2->val;
				if (sum >= 10)
				{
					flag = 1;
					sum %= 10;
				}
				else
				{
					flag = 0;
				}
				lt->val = sum;
			}
			else if (l2==NULL&&l1!=NULL)
			{
				sum += l1->val;
				if (sum >= 10)
				{
					flag = 1;
					sum %= 10;
				}
				else
				{
					flag = 0;
				}
				lt->val = sum;
			}else if (l1!=NULL&&l2!=NULL)
			{
				sum += l1->val + l2->val;
				if (sum >= 10)
				{
					flag = 1;
					sum %=10 ;
				}
				else
				{
					flag = 0;
				}
				lt->val = sum;
			}
			else
			{
				if (sum >= 10)
				{
					flag = 1;
					sum %= 10;
				}
				else
				{
					flag = 0;
				}
				lt->val = sum;
			}
			
		
			
			if (l1!=NULL)
			{
				l1 = l1->next;
			}

			if (l2 != NULL)
			{
				l2 = l2->next;
			}
			
			if (l1==NULL&&l2==NULL&&flag==0)
			{
				break;
			}

			lt->next = new ListNode(0);
			lt = lt->next;

		}

		return head;
    }
};

2. 两数相加的原题链接

猜你喜欢

转载自blog.csdn.net/wu_lian_nan/article/details/84330531