LeetCode刻意练习10--两数相加
题目: 思路: 要注意到是逆序存储,否则会将问题复杂化。 1.定义一个结点,用于存储结果单链表。其中定义一个指针ptr,方便该链表进行元素的添加。 2.考虑特殊情况,长度不相等,l1或l2为空。 (1)carry(进位)+不为空的值==0,则将0存入结果链表,并且carry=1; (2)carry+不为空的链表的值<0;j将该值直接存入结果链表。 不为空的链表指针前移,重复以上步骤,直到链表遍历结束 3.一般情况,长度相等。 (1)相同位置两个结点加上carry的和大于等于10,则将该值-10后存入结果链表,carry=1; (2)相同位置两个结点加上carry的和小于10,则将该值后存入结果链表。并且carry=0; 两链表指针后移,重复以上步骤,直到链表遍历结束。 注意:跳出循环后还要关注carry是否为1,如果是,则将1存入结果单链表。 ListNode result = new ListNode ( 0 ) ; ListNode ptr = result ; int carry = 0 ; while ( l1 != null && l2 != null ) { if ( l1 . val + l2 . val + carry >= 10 ) { ListNode p = new ListNode ( l1 . val + l2 . val + carry - 10 ) ;