题目:
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
思路:
- 遍历两个链表,逐位相加,还要加上进位
- 结果要存在链表里,所以一个 head 链表记住链表头, 另一个 tail 链表往后遍历,存储相加的结果
代码:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = null;
ListNode tail = null;
int add = 0;
while (l1!=null || l2!=null) {
int x =0;
int y = 0;
//思路:逐位相加,还要加上进位
if (l1!=null) {
x = l1.val;
}
if (l2!=null) {
y = l2.val;
}
//第一个链表的值,加上第二个链表的值,再加上累加值,就是结果
int sum = x+y+add;
if (head==null) {
//head为null, 说明是刚开始遍历。 head 主要是用来记住结果的链表头
// tail 也要初始化的
// sum取余10,就是每一位的值
tail = new ListNode(sum%10);
head = tail;
} else {
//将相加的结果,放到 tail 里面。逐个填入
tail.next = new ListNode(sum%10);
//向后遍历
tail = tail.next;
}
// sum除以10,就是要进位的值。
add = sum/10;
//两个链表,都要向后遍历
if (l1!=null) {
l1 = l1.next;
}
if (l2!=null) {
l2 = l2.next;
}
}
//最后,如果相加还有进位,要新建节点
if ( add >0) {
tail.next = new ListNode(add);
}
return head;
}
标签:head,ListNode,相加,链表,tail,l2,leetCode2,null
From: https://www.cnblogs.com/expiator/p/18417145