面试题 02.05. 链表求和
解题思路
1.分析题意,两个链表,是个位数在首部,所以实现同位相加即可
2.遍历两个链表,逐位相加,如果大于10,则累加到下一位
3.当前节点的值为(l1.val + l2.val + add) % 10
4.遍历完成两个链表,如果结果还有一次进位,则new ListNode(1)
解题遇到的问题
1.两个链表可能长短不一,其实这时可以简化题意,当某一个链表下一位为空时,可以认为当前位为0
int a = l1 == null ? 0 : l1.val;
int b = l2 == null ? 0 : l2.val;
2.结果链表,刚开始没有数据,需要注意初始化的特殊操作
if (result == null) {
result = new ListNode(vaule);
head = result;
}
后续需要总结学习的知识点
是否有其他解法?
##解法
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result = null;
ListNode head = null;
int add = 0;
while (l1 != null || l2 != null) {
int a = l1 == null ? 0 : l1.val;
int b = l2 == null ? 0 : l2.val;
int vaule = (a + b + add) % 10;
if (a + b + add > 9) {
add = 1;
} else {
add = 0;
}
if (result == null) {
result = new ListNode(vaule);
head = result;
} else {
ListNode t = new ListNode(vaule);
result.next = t;
result = result.next;
}
if (l1 != null) {
l1 = l1.next;
}
if (l2 != null) {
l2 = l2.next;
}
}
if (add == 1) {
ListNode t = new ListNode(1);
result.next = t;
}
return head;
}
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
}