文章目录
- 题目介绍
- 题解
题目介绍
题解
首先反转两个链表,再调用 2. 两数相加 链接的代码,得到链表,最后将其翻转即可。
java">class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {l1 = reverseList(l1);l2 = reverseList(l2); // l1 和 l2 反转后,就变成【2. 两数相加】了ListNode l3 = addTwo(l1, l2);return reverseList(l3);}// 翻转链表private ListNode reverseList(ListNode head) {ListNode pre = null;ListNode cur = head;while (cur != null) {ListNode nxt = cur.next;cur.next = pre;pre = cur;cur = nxt;}return pre;}private ListNode addTwo(ListNode l1, ListNode l2) {ListNode dummy = new ListNode(); // 哨兵节点ListNode cur = dummy;int carry = 0; // 进位while (l1 != null || l2 != null || carry != 0) { // 有一个不是空节点,或者还有进位,就继续迭代if (l1 != null) carry += l1.val; // 节点值和进位加在一起if (l2 != null) carry += l2.val; // 节点值和进位加在一起cur = cur.next = new ListNode(carry % 10); // 每个节点保存一个数位carry /= 10; // 新的进位if (l1 != null) l1 = l1.next; // 下一个节点if (l2 != null) l2 = l2.next; // 下一个节点}return dummy.next; // 哨兵节点的下一个节点就是头节点}
}