面接問題:2つのチェーンテーブル構造のデータを加算し、新しいチェーンテーブルに保存します.


//STLの使用
#include
//#include
#include
#include
//#include
#include
#include
#include
using namespace std;


list<int> sumTwoList(list<int>& l1, list<int>& l2)
{
	list<int> l3;
	int times=0; 
	list<int>::iterator p1 = l1.begin();
	list<int>::iterator p2 = l2.begin();
	//List* p3 = l3;

	int tmp = 0;
	while (p1!=l1.end() || p2!=l2.end())
	{
		tmp = times;
		times = 0;
		if (p1 != l1.end())
		{
			tmp += *p1;
			p1++;
		}
		if (p2 != l2.end())
		{
			tmp += *p2;
			p2++;
		}
		if (tmp>10)
		{
			int a = tmp;
			tmp = a % 10;
			times = a / 10;
		}
		l3.push_back(tmp);
		 
	}

	if (times)
	{
		l3.push_back(times);
	}

	return l3;
}

int main()
{
	int index = 1001;
	//cout << digitAtIndex(index) << endl;
	list<int> l1, l2, l3;
	l1.push_back(6); l1.push_back(5); l1.push_back(2);
	l2.push_back(6); l2.push_back(1); l2.push_back(9);

	l3 = sumTwoList(l1, l2);

	for (list<int>::iterator i = l3.begin(); i != l3.end(); i++)
	{
		cout << *i << " ";
	}

	return 0;
}

/****

***/

//自分でノードを作成する
struct ListNode
{
	int value;
	ListNode* next;
};
ListNode* sumTwoList(ListNode* l1, ListNode* l2)
{
	ListNode* l3 = nullptr;
	ListNode* p1 = l1;
	ListNode* p2 = l2;
	ListNode* p3 = l3;
	int times = 0;
	int sum=0;

	while (p1 || p2)
	{
		sum = times; times = 0;
		if (p1)
		{
			sum += p1->value;
			p1 = p1->next;
		}
		if (p2)
		{
			sum += p2->value;
			p2 = p2->next;
		}
		if (sum > 10)
		{
			int a = sum;
			sum = a % 10;
			times = a / 10;
		}

		p3 = new ListNode;
		p3->value = sum;
		p3 = p3->next;

	}
	if (times)
	{
		p3 = new ListNode;
		p3->value = times;
		p3 = p3->next;

	}

	return l3;
}