原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvw73v/
解法一:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode resultNode = new ListNode(0);
ListNode preNode = resultNode;
int carry = 0; // 0表示没有进位,1表示进位了
while (l1 != null || l2 != null || carry != 0) {
int sum = carry; // 加上进位的数
if (l1 != null) {
sum += l1.val;
l1 = l1.next;
}
if (l2 != null) {
sum += l2.val;
l2 = l2.next;
}
preNode.next = new ListNode(sum % 10);
carry = sum/10;
preNode = preNode.next;
}
return resultNode.next;
}
}
思路:两个链表逆序保存一位的整数,我们需要将他们相加形成一个新的整数链表,要想加,那就是遍历链表,遍历的过程中会有一个问题,那就是相加会有一个进位的过程,我们可以使用一个中间的变量来保存是否进位,1就是进位,0表示不进位,然后循环遍历的条件就是两个链表都不为null且中间变量不为0.