您的位置:首页 > 编程语言 > Java开发

LeetCode java实现Add Two Numbers

2015-07-21 14:11 381 查看
题目地址: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;
	}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: