* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
/*
分析:按照依次的相加,加上一个进位。注意两个的长度,不一定一样,每个链表都要遍历到底。
有一点 特别的 就是 进位的问题 如果有进位 两个相加的数为空的时候 也要加一个节点 (就是在最后一个地方要判断一下)。
特殊情况 当输入有空的时候,我们如何处理为妥?我们不能直接用l1.val 和 l2.val 来计算 应该用其他变量来装载,计算。
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int carry = 0;
int sum = 0;
ListNode root = new ListNode(0);
ListNode temp = root;
while(l1 != null || l2 != null){
// if(l1 == null)
// l1.val = 0;
// if(l2 == null)
// l2.val = 0;
int x = (l1 == null)?0:l1.val;
int y = (l2 == null)?0:l2.val;
sum = (carry + x + y);
carry = sum/10;
// ListNode temp = new ListNode(carry);
temp.next = new ListNode(sum % 10);
temp = temp.next;
//System.out.println(temp.val);
if(l1 != null)
l1 = l1.next;
if(l2 != null)
l2 = l2.next;
}
if(carry>0)
temp.next = new ListNode(carry);
return root.next;
}
}
leetcode
补充:
我们现在的这种第一个节点是头节点。所以要 root.next
如果我的 不想用这种方式 会遇到这样的问题。
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
/*
分析:按照依次的相加,加上一个进位。注意两个的长度,不一定一样,每个链表都要遍历到底。
有一点 特别的 就是 进位的问题 如果有进位 两个相加的数为空的时候 也要加一个节点 (就是在最后一个地方要判断一下)。
特殊情况 当输入有空的时候,我们如何处理为妥?我们不能直接用l1.val 和 l2.val 来计算 应该用其他变量来装载,计算。
//当进入循环 我们能够保证 本次循环 一定有结果! 但是不能保证 下一次是否进入 循环,所以不能冒冒然的
//申请下一个节点,不能保证下一个节点 是否 需要,虽然可以 跳出循环再去 判断 并 修改。但是 麻烦了(链表定位没数组好 // 搞)
所以 我们将正确的 必有值的结果 直接放在 下一个节点中,第一个节点 作为 头节点(数据域无意义)。
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int carry = 0;
int sum = 0;
int x = 0,y = 0;
ListNode root = new ListNode(0);
ListNode temp = root;
while(l1 != null || l2 != null){
//当进入循环 我们能够保证 本次循环 一定有结果! 但是不能保证 下一次是否进入 循环,所以不能冒冒然的
//申请下一个节点,不能保证下一个节点 是否 需要,虽然可以 跳出循环再去 判断 并 修改。但是 麻烦了(链表定位没数组好 // 搞)
x = (l1 == null)?0:l1.val;
y = (l2 == null)?0:l2.val;
sum = carry + x +y;
carry = sum/10;
temp.next = new ListNode(sum%10);
temp = temp.next;
if(l1 != null)
l1 = l1.next;
if(l2 != null)
l2 = l2.next;
}
if(carry == 1)
temp.next = new ListNode(carry);
return root.next;
}
}
/*
int carry = 0;
int sum = 0;
ListNode root = new ListNode(0);
ListNode temp = root;
while(l1 != null || l2 != null){
// if(l1 == null)
// l1.val = 0;
// if(l2 == null)
// l2.val = 0;
int x = (l1 == null)?0:l1.val;
int y = (l2 == null)?0:l2.val;
sum = (carry + x + y);
carry = sum/10;
// ListNode temp = new ListNode(carry);
temp.next = new ListNode(sum % 10);
temp = temp.next;
//System.out.println(temp.val);
if(l1 != null)
l1 = l1.next;
if(l2 != null)
l2 = l2.next;
}
if(carry>0)
temp.next = new ListNode(carry);
return root.next;
*/