您的位置:首页 > 其它

LeetCode题解-2-Add Two Numbers

2017-02-17 21:42 489 查看

解题思路

这个题目也是比较简单的。主要需要考虑的是如何处理l1和l2长度不一致的情况,进位的处理,还有特别考虑最后一次进位的情况。

为了简化处理,我采用了一个哑结点作为head,用carry下次操作的进位值,默认是0.

然后从头开始遍历,每次的和等于上一次进位加上2个结点的值(如果存在的话),如果其中一个结点为空,就当值为0处理,直到2个结点都为空。最后2个结点为空时判断进位是否为1,如果是就增加多一个结点。

最终,返回哑结点的下一个结点就可以了。

参考源码

public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = new ListNode(0);
ListNode curr = head;
int carry = 0;

while (l1 != null || l2 != null) {
int sum = carry;
if (l1 != null) {
sum += l1.val;
l1 = l1.next;
}
if (l2 != null) {
sum += l2.val;
l2 = l2.next;
}
if (sum >= 10) {
carry = 1;
sum -= 10;
} else {
carry = 0;
}

curr.next = new ListNode(sum);
curr = curr.next;
}

if (carry != 0) {
curr.next = new ListNode(carry);
}
return head.next;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode