1. 程式人生 > >LeetCode之2. 兩數相加

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. 兩數相加的原題連結