面接問題: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;
}