LeetCodeQ2:两数相加
题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
题解:
利用哑结点,遍历两个链表的值使其一 一相加,用carry记录当前的值是否大于10; 大于10下一位如果有值不为空则+1,如果下一位值为空说明已经遍历完成了,则在末尾创建一个新的节点值为 carry值,当前的相加的值为 sum %10。
public ListNode twoSum(ListNode l1, ListNode l2) {
ListNode dh = new ListNode(0);
ListNode a = l1, b = l2, pre = dh;
int carry = 0;
while (a != null || b != null) {
int x = (a != null) ? a.val : 0;
int y = (b != null) ? b.val : 0;
int sum = carry + x + y;
carry = sum / 10;
pre.next = new ListNode(sum % 10);
pre = pre.next;
if (a != null)
a = a.next;
if (b != null)
b = b.next;
}
// 遍历完成,carry仍然大于0则在末尾创建一个新的节点值为当前的carry值
if (carry > 0) {
pre.next = new ListNode(carry);
}
return dh.next;
}