2. 两数相加

image.png

题解

迭代累加

  1. public class Solution {
  2. public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
  3. // 存放头节点,作为返回值
  4. ListNode head = null;
  5. // 存放当前节点
  6. ListNode temp = null;
  7. // 记录是否进位,如果进位为 1,无进位为 0
  8. int nextTip = 0;
  9. // 循环终于条件:l1 和 l2 都为空
  10. while (l1 != null || l2 != null) {
  11. // 如果链表不为空,记录链表的值,如果为空则补 0
  12. int l1V = l1 != null ? l1.val : 0;
  13. int l2V = l2 != null ? l2.val : 0;
  14. // 记录相加之后的值,注意要加进位
  15. int sum = l1V + l2V + nextTip;
  16. // 如果 sum 大于等于10,进位
  17. nextTip = sum >= 10 ? 1 : 0;
  18. // 如果头节点为空,说明是第一次循环,进行初使化头节点操作
  19. if (head == null) {
  20. head = temp = new ListNode(sum % 10);
  21. } else {
  22. temp.next = new ListNode(sum % 10);
  23. temp = temp.next;
  24. }
  25. if (l1 != null) l1 = l1.next;
  26. if (l2 != null) l2 = l2.next;
  27. }
  28. // 注意处理最后一个进位
  29. if (nextTip == 1) temp.next = new ListNode(1);
  30. return head;
  31. }
  32. }