两数相加

LeetCode-day2

两数相加

描述: 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
可以假设除了数字 0 之外,这两个数都不会以 0 开头。
在这里插入图片描述
解题思路及实现:
由于链表的头为个位,由此考虑从两个链表的头开始相加,按照初等数学的思路,利用变量进行跟踪,模拟相加的过程。
链表

class ListNode {
     int val;
     ListNode next;
     ListNode(int x) { val = x; }
 }

1.官网解法

public static ListNode addTwoNumbers2(ListNode l1, ListNode l2) {
		 ListNode answer=new ListNode(0);
		 ListNode p=l1;
		 ListNode q=l2;
		 ListNode cur=answer;
		 int temp=0;
		 int sum;
		 while(p!=null||q!=null) {
			 int x=(p!=null) ? p.val:0;
			 int y=(q!=null) ? q.val:0;
			 sum=temp+x+y;
			 temp=sum/10;
			 cur.next=new ListNode(sum%10);
			 cur=cur.next;
			 if(p!=null) {
				 p=p.next;
			 }
			 if(q!=null) {
				 q=q.next;
			 }
		 }
		 if(temp>0) {
			 cur.next=new ListNode(temp);
		 }
		 return answer.next;
	 }
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		 ListNode answer=new ListNode(0);
		 ListNode an=answer;
		while(l1!=null&&l2!=null) {
			 if(l1.val+l2.val+an.val<10) {
				 an.val+=l1.val+l2.val;
				 if(l1.next!=null||l2.next!=null) {
					 an.next=new ListNode(0);
				 }
				 an=an.next;
			 }else {
				 an.val=(an.val+l1.val+l2.val)-10; 
				 an.next=new ListNode(1);
				 an=an.next;
			 }
			 
			 l1=l1.next;
			 l2=l2.next;
		}
		while(l1!=null) {
			if(l1.val+an.val<10) {
				an.val+=l1.val;
				if(l1.next!=null) {
					an.next=new ListNode(0);
				}				
				an=an.next;
			}else {
				an.val=(an.val+l1.val)-10; 
				an.next=new ListNode(1);
				an=an.next;
			}
			l1=l1.next;
		}
		while(l2!=null) {
			if(l2.val+an.val<10) {
			an.val+=l2.val;
			an.next=new ListNode(0);
			an=an.next;
		}else {
			an.val=(an.val+l2.val)-10; 
			an.next=new ListNode(1);
			an=an.next;
		}
		l2=l2.next;
		}
		 return answer;
	        
	    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值