2.两数相加
题目描述
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
思路
两条链表直接原地相加,顺便检查是否要进位。
代码
public static ListNode02 addTwoNumbers(ListNode02 l1, ListNode02 l2){
ListNode02 head = l1;
while (l1.next != null && l2.next != null){
l1.val += l2.val;
//进位判断
if (l1.val>= 10){
l1.val %= 10;
l1.next.val++;
}
l1 = l1.next;
l2 = l2.next;
}
//最后一个数
l1.val += l2.val;
if (l1.next == null){
l1.next = l2.next;
}
//直接从末尾开始
ListNode02 ptr = l1;
while (ptr != null){
if (ptr.val>=10){
ptr.val %= 10;
if (ptr.next != null){
ptr.next.val++;
}else{
ptr.next = new ListNode02(1);
break;
}
}
ptr = ptr.next;
}
return head;
}