leetcode 2. 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

按位加,否则溢出


class Solution {
public:
	ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
		vector<int>n1, n2;
		ListNode*node1(l1), *node2(l2);

		while (node1 != NULL)
		{
			n1.push_back(node1->val);
			node1 = node1->next;
		}
		while (node2 != NULL)
		{
			n2.push_back(node2->val);
			node2 = node2->next;
		}
		vector<int>re;
		if (n1.empty() && n2.empty())
		{
			ListNode*h = new ListNode(0);
			return h;
		}
		else if (n1.empty())
		{
			re = n2;
		}
		else if (n2.empty())
		{
			re = n1;
		}
		else
		{
			int jmax = n1.size() < n2.size() ? n1.size() : n2.size();
			int f = 0;
			for (int j = 0; j < jmax; j++)
			{
				int s = n1[j] + n2[j] + f;
				if (s > 9)
					f = 1;
				else
					f = 0;
				re.push_back(s % 10);
			}
			if (n1.size() == n2.size())
			{
				if (f > 0)
					re.push_back(1);
			}
			else if (n1.size() > n2.size())
			{
				for (int j = jmax; j < n1.size(); j++)
				{
					int s = n1[j] + f;
					if (s > 9)
						f = 1;
					else
						f = 0;
					re.push_back(s % 10);
				}
				if (f > 0)
					re.push_back(1);
			}
			else if (n1.size() < n2.size())
			{
				for (int j = jmax; j < n2.size(); j++)
				{
					int s = n2[j] + f;
					if (s > 9)
						f = 1;
					else
						f = 0;
					re.push_back(s % 10);
				}
				if (f > 0)
					re.push_back(1);
			}
		}

		ListNode*head = new ListNode(re[0]);
		ListNode*n = head;
		int kk = 1;
		while (kk<re.size())
		{
			ListNode *nn = new ListNode(re[kk]);
			n->next = nn;
			n = n->next;
			kk++;
		}
		return head;
	}
};

accepted



你可能感兴趣的:(LeetCode)