题目描述

https://leetcode.cn/problems/add-two-numbers/
image.png

解题思路

本题就是将两个链表的的值进行相加,但是例如343+564=807,此时就会有进位,所以我们新生成的链表节点的值一定是10的余数,进位用temp变量来表示 temp=n/10。
流程就是:遍历2个链表,将余数作为新节点的值,进位就相加在下一位,注意最后需要处理进位。

  1. class Solution {
  2. public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
  3. ListNode head = null, cur = null;
  4. int temp = 0;
  5. while (l1 != null || l2 != null) {
  6. int n1 = l1 == null ? 0 : l1.val;
  7. int n2 = l2 == null ? 0 : l2.val;
  8. int sum = n1 + n2 + temp;
  9. if (head == null) {
  10. head = cur = new ListNode(sum % 10);
  11. }else {
  12. cur.next = new ListNode(sum % 10);
  13. cur = cur.next;
  14. }
  15. // 获取进位
  16. temp = sum / 10;
  17. if (l1 != null) l1 = l1.next;
  18. if (l2 != null) l2 = l2.next;
  19. }
  20. // 处理最后进位的temp
  21. if (temp > 0) {
  22. cur.next = new ListNode(temp);
  23. }
  24. return head;
  25. }
  26. }