两数相加
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//创建头尾节点,并置空
ListNode head = null, tail = null;
//进位初始化为0
int carry = 0;
while (l1 != null || l2 != null) {
//判断长短
//求和
int n1 = l1 != null ? l1.val : 0;
int n2 = l2 != null ? l2.val : 0;
int sum = n1 + n2 + carry;
//判断这个和链表如果为空,则开第一个新空间,否则,先开节点再指向下一个位置。
if (head == null) {
head = tail = new ListNode(sum % 10);
} else {
tail.next = new ListNode(sum % 10);
tail = tail.next;
}
//求进位
carry = sum / 10;
//链表后移
if (l1 != null) {
l1 = l1.next;
}
if (l2 != null) {
l2 = l2.next;
}
}
//最后一位如果进位大于0,再新开一个节点
if (carry > 0) {
tail.next = new ListNode(carry);
}
return head;
}
}