Add Two Numbers--leetcode

半路出家菜鸟一枚,在接触这道题之前对链表的了解仅限于概念方面,不知道链表的代码如何实现,现学现卖吧。下面先上代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode Sum = new ListNode(0);
        ListNode add1 = l1;
        ListNode add2 = l2;
        ListNode curr = Sum;
        int x, y, psum;
        int carry = 0;
        while (add1 != null || add2 != null){
            x = add1 == null ? 0 : add1.val;
            y = add2 == null ? 0 : add2.val;
            psum = x + y + carry;
            carry = psum / 10;
            curr.next = new ListNode(psum %10);
            if(add1 != null)
                add1 = add1.next;
            if(add2 != null)
                add2 = add2.next;
            curr = curr.next;
        }
        if(carry != 0){
            curr.next = new ListNode(carry);
        }
        return Sum.next;
    }
    
}
以上,是我参考了leetcode上面提供的Solution,在我参照之前,脑子里能勾勒出大概流程,但是作为一个欠缺编程经验的程序员,我有以下几个方面没有考虑到:

1.不知道如何遍历链表各个节点的值,目前我只能理解明白类似于add1 = add1.next; 这种,大概意思是指向下一节点,但是不明白为什么要定义add1和add2这两个,感觉直接用l1和l2也可以,但是不知道这样会不会对l1和l2有所改变;

2.每一步都应该及时判断add1和add2是否为空,即看看是否走到了链表的最后一个节点,这里我觉得要注意的一点是,判断是否走到最后一个节点的作用,不仅仅在于决定了加数是否为0,而且在指向下一个节点的时候,如果此时已经走到了最后(最后一个节点的.next指向为空),就不能再将add1和add2指向下一个节点了,那样个人觉得代码会报空指针的错误;

3.对于结果链表Sum来说,相当于一个空链表,所以每一次往里面存数的时候都需要new出来一个节点;

4.考虑进位问题,这是我一开始没有想到的。

以后会继续更新,也许刚看完一遍现在理解的也有错,后续发现会把错误更改,各位同行发现麻烦指正。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值