java给出两个整数ab求和,LeetCode-两数相加(Java)【单链表&解题思路】

题目:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

我起初的想法很简单:

初始化两个链表,然后取出两个链表中的每一个元素相加,然后再定义一个链表用于存储这个求和产生的链表

在实现的过程中遇到了如下的问题:

测试方法中,输出 addTwoNumbers 方法的返回值,输出是hashcode值

没有考虑到数字进位的问题(蠢到爆的问题😂)

函数返回 curr.next 为空

上面的问题都解决了,报错:Operator'' cannot be applied to 'int', 'addTwoNumbers. ListNode

解决上面问题的方法:

1. 测试方法,在输出addTwoNumbers方法返回值的时候,使用 System.out.print(sum.val);

2. 解决进位问题:

carry = numsum / 10;//获取进位的值

curr.next = new ListNode(numsum % 10);//取模运算,把个位数字存到链表sum中

3. 因为头结点是没有前一个结点的,因此我们要浪费一个空间使其总是以null作为头结点。所以返回的不应该是 curr.next 而应该是 sum.next;

4. 解决 int 和 ListNode 不能相加的问题:

int x = (p != null) ? p.val : 0;

int y = (q != null) ? q.val : 0;

int numsum = carry + x + y;

完整代码:

public class addTwoNumbers {

public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {

ListNode sum = new ListNode(0);

ListNode p = l1, q = l2, curr = sum;

int carry = 0;//进位

while(p != null || q != null) {

//解决 Operator'' cannot be applied to 'int', 'addTwoNumbers. ListNode

int x = (p != null) ? p.val : 0;

int y = (q != null) ? q.val : 0;

int numsum = carry + x + y;

carry = numsum / 10;//获取进位的值

curr.next = new ListNode(numsum % 10);//取模运算,把个位数字存到链表sum中

curr = curr.next;

if (p != null) p = p.next;

if (q != null) q = q.next;

}

if (carry > 0) {

curr.next = new ListNode(carry);

}

return sum.next;

}

public static void main(String[] args) {

ListNode listNode1 = new ListNode(2);

ListNode listNode2 = new ListNode(4);

ListNode listNode3 = new ListNode(3);

listNode1.next = listNode2;

listNode2.next = listNode3;

ListNode listNode21 = new ListNode(5);

ListNode listNode22 = new ListNode(6);

ListNode listNode23 = new ListNode(4);

listNode21.next = listNode22;

listNode22.next = listNode23;

ListNode sum = addTwoNumbers(listNode1, listNode21);

while (sum != null){

System.out.print(sum.val);

sum = sum.next;

System.out.print("->");

}

}

}

本文分享 CSDN - 进阶的小名。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值