面试题 02.05. 链表求和(链表)

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     }
原文地址:https://www.cnblogs.com/haifwu/p/14835333.html