Leetcode (2 questions, C++)

Title link: https://leetcode-cn.com/problems/add-two-numbers/

My code:

#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;
}

 

 

Guess you like

Origin blog.csdn.net/qq_35789421/article/details/114033284