Leet Code 2.两数相加

2.两数相加

题目描述

给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

示例

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

解题思路

  • 对两个链表的起始位进行相加,保存在第三个链表节点。
  • 需要注意进位,若进位为1,则下一位要加一,若是最后的进位仍为1,则需要将结果链表多一位。

代码

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        
        ListNode newnode = new ListNode(0);
        ListNode l3 = newnode;
        int c = 0;
    	while(l1 != null || l2 != null || c > 0) {
            int sum = ((l1 != null) ? l1.val : 0) + ((l2 != null) ? l2.val : 0) + c;
    			c = sum/10;
    		l3.next = new ListNode(sum%10);
    		l3 = l3.next;
            if(l1!=null)
            {
            l1 = l1.next;
            }
    		if(l2!=null)
            {
            l2 = l2.next;
            }
    	}
    	return newnode.next;
    }
}

题目难点及收获

  • 构建链表的细节,因为刚接触Java,之前用C。构建链表时并没有注意到不能对空指针操作。
  • coding中,了解到静态内部类不能访问非静态类的方法。这是由于非静态类不是一开始就编译好的,静态方法执行优先于非静态。
posted @ 2019-11-14 10:49  Tanglement  阅读(101)  评论(0编辑  收藏  举报