leetcode-Two

82 阅读1分钟

Add Two Numbers

java

description:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
          ListNode aListNode = new ListNode(0);
          ListNode newListNode = aListNode;
          int count = 0;
          while (!(l1==null&&l2==null)) {
              int x = l1 == null ? 0:l1.val;
              int y = l2 == null ? 0:l2.val;
              int sum = x + y + count;
              newListNode.next = new ListNode(sum % 10);
              newListNode = newListNode.next;
              count = sum / 10;
              if (l1 != null) l1 = l1.next;
              if (l2 != null) l2 = l2.next;
          }
        if (count == 1) newListNode.next = new ListNode(count);
        return aListNode.next;
    }
}

java解题思路

  1. 首先初始化一个链表(aListnode),参数给0,然后赋值给newListNode,顺便声明一个int变量count用来进位
  2. 如果li和l2当前节点的值都为null时跳出循环
  3. 将l1和l2的值赋值给x和y,如果为null则赋值0
  4. 声明sum为三者的和值,然后将链表newListNode的下一节点值赋值为sum的余数
  5. count除以10用来判断是否需要进位
  6. l1和l2的最后一个节点如果有进位则存储count到newListNode的下一节点
  7. 最后返回aListNode.next
  8. 因为刚开始将aListNode头结点设置为0,开辟内存指针指向0
  9. 在赋值给newListNode的时候newListNode和aListNode头节点指针指向的是同一个内存
  10. while循环中每次存的是一个new出来的新地址然后保存到newListNode的下一节点
  11. 所以aListnode起到一个预先指针的作用
  12. 最后返回aListNode.next的时候就可以返回newListNode链表的所有东西了
  13. 注意:return并不会一下返回所有,而是返回newListNode的下一节点,但是每个节点都有next属性,所以就串联起来了