LeetCode刻意练习10--两数相加

在这里插入图片描述
题目:在这里插入图片描述
思路:
要注意到是逆序存储,否则会将问题复杂化。
1.定义一个结点,用于存储结果单链表。其中定义一个指针ptr,方便该链表进行元素的添加。
2.考虑特殊情况,长度不相等,l1或l2为空。
(1)carry(进位)+不为空的值==0,则将0存入结果链表,并且carry=1;
(2)carry+不为空的链表的值<0;j将该值直接存入结果链表。
不为空的链表指针前移,重复以上步骤,直到链表遍历结束
3.一般情况,长度相等。
(1)相同位置两个结点加上carry的和大于等于10,则将该值-10后存入结果链表,carry=1;
(2)相同位置两个结点加上carry的和小于10,则将该值后存入结果链表。并且carry=0;
两链表指针后移,重复以上步骤,直到链表遍历结束。
注意:跳出循环后还要关注carry是否为1,如果是,则将1存入结果单链表。

   	    	ListNode result=new ListNode(0);
    	ListNode ptr=result;
    	int carry=0;
    	
    	while(l1!=null&&l2!=null)
    	{
    		if(l1.val+l2.val+carry>=10)
    		{
    			ListNode p=new ListNode(l1.val+l2.val+carry-10);
    			ptr.next=p;
    			ptr=p;
    			carry=1;
    		}
    		else
    		{
    			ListNode p=new ListNode(carry+l1.val+l2.val);
    			ptr.next=p;
    			ptr=p;
    			carry=0;
    		}
    		l1=l1.next;
    		l2=l2.next;
    	}
    	
    	while(l1!=null&&l2==null)
    	{
    		if(carry+l1.val==10)
    		{
    			ListNode p=new ListNode(0);
    			ptr.next=p;
    			ptr=p;
    			carry=1;
    		}
    		else
    		{
    			ListNode p=new ListNode(carry+l1.val);
    			ptr.next=p;
    			ptr=p;
    			carry=0;
    		}
    		l1=l1.next;
    	}
    	
    	while(l2!=null&&l1==null)
    	{
    		if(carry+l2.val==10)
    		{
    			ListNode p=new ListNode(0);
    			ptr.next=p;
    			ptr=p;
    			carry=1;
    		}
    		else
    		{
    			ListNode p=new ListNode(carry+l2.val);
    			ptr.next=p;
    			ptr=p;
    			carry=0;
    		}
    		l2=l2.next;
    	}
    	if(carry==1)
    	{
    		ListNode p=new ListNode(1);
			ptr.next=p;
    	}
    	return result.next;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凭栏听雨客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值