leetcode2

CCCV大会志愿者三天,代码是来之前通过的。

比较简单,链表相加考虑进位。

动态分配单链表操作有一些遗忘,做题之前看了一下链表基本操作(参考http://c.biancheng.net/cpp/html/2672.html)

在本题中复杂的操作没有,主要是创建链表和在尾部插入链表。

代码如下:

#include<iostream>
using namespace std;
//  Definition for singly-linked list.
struct ListNode {
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
};
 
class Solution {
private:
	int max(int a,int b)
	{
		return a>b?a:b;
	}
	void insert(ListNode*l,ListNode*p)
	{
		ListNode * r = l;
		while(r->next!=NULL)
		{
			r=r->next;
		}
		r->next=p;
	}
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
		ListNode* result=new ListNode(0);
		int mol=0;
		int sum=0;
		int exc = 0;
		int l1_val=0;
		int l2_val=0;
		while(l1!=NULL || l2!=NULL)
		{
			if(l1)
			{
				l1_val = l1->val;
			}
			else
			{
				l1_val=0;
			}
			if(l2)
			{
				l2_val = l2->val;
			}
			else
			{
				l2_val=0;
			}
			
			sum=l1_val + l2_val + exc;
			exc = sum / 10;
			mol = sum % 10;
			ListNode*p = new ListNode(mol);
			insert(result,p);
			if(l1)
				l1=l1->next;
			if(l2)
				l2=l2->next;
		}
		if(exc>0)
		{
			ListNode*p = new ListNode(exc);
			insert(result,p);
		}
		result=result-next;//输出格式
		return result;
    }
};

唯一需要注意的是两条链表不等长的情况下,短的那条在后续的相加中,值为0。

最后就是注意输出格式了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值