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

筅森魡賤 提交于 2020-03-08 15:05:52

在这里插入图片描述
题目:在这里插入图片描述
思路:
要注意到是逆序存储,否则会将问题复杂化。
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;
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!