1. 题目
给定两个用链表表示的整数,每个节点包含一个数位。
这些数位是反向存放的,也就是个位排在链表首部。
编写函数对这两个整数求和,并用链表形式返回结果。
2. 示例
示例1:
输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
3. 题解
这道题的思路很简单,只需要针对每一位计算即可。
遍历两个链表,若两个都不为空,直接l1.val+l2.val+temp,其中temp为进位;
若仅有一个链表不为空,则l1.val(或l2.val) + temp;
遍历结束后,因为还要看temp是否为0,若不为0,则需要加入链表。
4. Code
1 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
2 int temp = 0;
3 ListNode listNode = new ListNode(0);
4 ListNode cur = listNode;
5 int l = 0;
6 while(l1 != null || l2 != null) {
7 if(l1 != null && l2 != null) {
8 l = l1.val + l2.val + temp;
9 l1 = l1.next;
10 l2 = l2.next;
11 } else if(l1 != null) {
12 l = l1.val + temp;
13 l1 = l1.next;
14 } else if(l2 != null){
15 l = l2.val + temp;
16 l2 = l2.next;
17 }
18 int out = l % 10;
19 cur.next = new ListNode(out);
20 cur = cur.next;
21 temp = l / 10;
22 }
23 if(temp != 0) {
24 cur.next = new ListNode(temp);
25 cur = cur.next;
26 }
27 return listNode.next;
28 }