Leetcode: Topic 2 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的....

1、对于这个题目,想到的就是。。直接相加然后进位

struct ListNode
{
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL)
	{
	}
};

ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{    
        // 注意这里其实改变了l1 l2的指向内容,此方法存在问题,建议使用第二种
	// 用这个存放计算结果
	ListNode* pNode = nullptr;
	ListNode* pStartNode = nullptr;
	int nTarg = 0;
	while (l1 && l2)
	{
		int nValue = l1->val + l2->val + nTarg;
		nTarg = nValue / 10;

		ListNode* node = new ListNode(nValue % 10);
		node->next = nullptr;
		if (pNode)
		{
			pNode->next = node;
			
		}
		else
		{
			pStartNode = node;
		}
		pNode = node;
		l1 = l1->next;
		l2 = l2->next;
	}

	while (l1)
	{
		int nValue = l1->val + nTarg;
		nTarg = nValue / 10;
		ListNode* node = new ListNode(nValue % 10);
		node->next = nullptr;
		if (pNode)
		{
			pNode->next = node;

		}
		else
		{
			pStartNode = node;
		}
		pNode = node;
		l1 = l1->next;
	}

	while (l2)
	{
		int nValue = l2->val + nTarg;
		nTarg = nValue / 10;
		ListNode* node = new ListNode(nValue % 10);
		node->next = nullptr;
		if (pNode)
		{
			pNode->next = node;

		}
		else
		{
			pStartNode = node;
		}
		pNode = node;
		l2 = l2->next;
	}
    
    // 当l1 l2处理完,任存在进位的可能
	if (nTarg == 1)
	{
		ListNode* node = new ListNode(nTarg);
		pNode->next = node;
	}

	return pStartNode;
}

2、把上面代码优化一下

ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
    // 注意。。我们不能改变l1 l2指针的指向内容
    ListNode *p = l1, *q = l2;
    // 用这个存放计算结果
    ListNode* pNode = nullptr;
    ListNode* pStartNode = nullptr;
    int nTarg = 0;
    while (p || q)
    {
    	int nValue = nTarg;
    	if (p)
    	{
    		nValue += p->val;
    		p = p->next;
    	}
    
    	if (q)
    	{
    		nValue += q->val;
    		q = q->next;
    	}
    
    	nTarg = nValue / 10;
    
    	ListNode* node = new ListNode(nValue % 10);
    	node->next = nullptr;
    	if (pNode)
    	{
    		pNode->next = node;
    		
    	}
    	else
    	{
    		pStartNode = node;
    	}
    	pNode = node;
    }
    
    if (nTarg == 1)
    {
    	ListNode* node = new ListNode(nTarg);
    	pNode->next = node;
    }
    
    return pStartNode;

}

3、对于拓展。。其实很简单,我们使用2个栈,l1、l2分别压入栈s1、s2中,然后出栈计算就行了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值