LeetCode java实现Add Two Numbers

题目地址:https://leetcode.com/problems/add-two-numbers/

题目大意就是说给定了你两个数,但是这两个数是倒序存在两个链表里的,例如说342 表现为2->4->3的链表,465表现为5->6->4的链表。

现在让你实现这两个数相加,并且输出也是一个这样类似的链表。


这个题目看起来很简单,思路也很清晰,无法就是按位遍历,然后有进位则下一位加一,貌似实现起来非常容易。但是,在实际过程中还是遇到了一些问题,主要是因为是用java写的,比C语言稍微繁琐一些,同时进位问题需考虑首位及末尾。最后accepted的代码如下:

	public ListNode addTwoNumbers(ListNode l1,ListNode l2){
		boolean hasCarry = false;
		ListNode l3;
		if((l1.val+l2.val)>=10){
			l3 = new ListNode(l1.val+l2.val-10);
			hasCarry = true;
		}else {
			l3 = new ListNode(l1.val+l2.val);			
		}
		ListNode tmp1 = l1;//L1 point
		ListNode tmp2 = l2;//L2 point
		ListNode tmp3 = l3;//L3 point
		ListNode tmp = null;
		int value = 0;		
		while (tmp1.next!=null||tmp2.next!=null) {
			if(tmp1.next!=null&&tmp2.next!=null){
				tmp1 = tmp1.next;
				tmp2 = tmp2.next;
				value = tmp1.val+tmp2.val;				
			}else if (tmp1.next!=null&&tmp2.next==null) {
				tmp1 = tmp1.next;
				value = tmp1.val+0;
			}else if (tmp2.next!=null&&tmp1.next==null) {
				tmp2 = tmp2.next;
				value = 0+tmp2.val;
			}
			value = hasCarry?value+1:value;
			if(value>=10){
				tmp = new ListNode(value-10);
				hasCarry = true;
			}else {
				tmp = new ListNode(value);
				hasCarry = false;
			}			
			tmp3.next = tmp;
			tmp3 = tmp;
		}
		if(hasCarry){
			tmp3.next = new ListNode(1);
		}
		return l3;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值