题目链接:https://leetcode-cn.com/problems/add-two-numbers/
我的代码:
#include <iostream>
#include <math.h>
class LinkNode
{
friend void Add(LinkNode n1, LinkNode n2, LinkNode &out);
public:
LinkNode(uint16_t val);
LinkNode();
~LinkNode();
uint16_t Get_Link();//从链表获得存储数据
private:
uint16_t *head = NULL;//头指针
uint16_t Value = 0;//链表数据域
uint16_t *Link = new uint16_t;//链表指针域
uint16_t flag = 0;//数据数位
};
LinkNode::LinkNode(uint16_t val)
{
Value = val;
head = Link;
for (int ans = Value; ans != 0; )
{
*Link = ans % 10;
Link++;
ans = ans / 10;
flag++;
}
}
LinkNode::LinkNode()
{
}
LinkNode::~LinkNode()
{
}
uint16_t LinkNode::Get_Link()
{
uint16_t ans = 0;
Link = head;
uint16_t i = flag;
for(uint16_t j =0; i != 0; i--,j++)
{
ans = ans + (*Link) * pow(10,j);
Link++;
}
Value = ans;
return ans;
}
void Add(LinkNode n1, LinkNode n2, LinkNode &output)
{
n1.Link = n1.head;
n2.Link = n2.head;
output.head = output.Link;
uint16_t i = n1.flag;
uint16_t j = n2.flag;
bool over = false;
if (n1.flag > n2.flag)
{
output.flag = n1.flag;
}
else
{
output.flag = n2.flag;
}
for (; i != 0 && j != 0; i--, j--)
{
switch (over)
{
case false: *output.Link = (*n1.Link) + (*n2.Link); break;
case true:
*output.Link = (*n1.Link) + (*n2.Link);
(*output.Link)++;
over = false;
break;
}
if (*output.Link > 9)
{
*output.Link = *output.Link % 10;
over = true;
}
output.Link++;
n1.Link++;
n2.Link++;
}
if (over == true)
{
if (i == j)
{
output.flag++;
*output.Link = 1;
}
else
{
if (i != 0)
{
*output.Link = *n1.Link;
}
else
{
*output.Link = *n2.Link;
}
(*output.Link)++;
}
}
else
{
if (i != 0)
{
*output.Link = *n1.Link;
}
else
{
*output.Link = *n2.Link;
}
}
}
void main()
{
LinkNode num1(5554);
LinkNode num2(333);
LinkNode num;
std::cout << num1.Get_Link() << std::endl;
std::cout << num2.Get_Link() << std::endl;
Add(num1, num2, num);
std::cout << num.Get_Link() << std::endl;
}