解题思路
这个题目也是比较简单的。主要需要考虑的是如何处理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; }}