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