首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2.两数相加

2.两数相加

作者头像
名字是乱打的
发布2021-12-23 18:39:55
发布2021-12-23 18:39:55
5350
举报
文章被收录于专栏:软件工程软件工程

题目

思路:

  • 将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补 00,比如 987 + 23 = 987 + 023 = 1010
  • 每一位计算的同时需要考虑上一位的进位问题,而当前位计算结束后同样需要更新进位值
  • 如果两个链表全部遍历完毕后,进位值为 11,则在新链表最前方添加节点 11
  • 小技巧:对于链表问题,返回结果为头结点时,通常需要先初始化一个预先指针 pre,该指针的下一个节点指向真正的头结点head。使用预先指针的目的在于链表初始化时无可用节点值,而且链表构造过程需要指针移动,进而会导致头指针丢失,无法返回结果。
代码:
代码语言:javascript
复制
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        //新链表的头的前一个结点
        ListNode pre = new ListNode(0);
        //当前要更新的链表位置
        ListNode curr = pre;
        //进位值
        int carry=0;
        while (l1 != null || l2 != null) {
            int a = l1 == null ? 0 : l1.val;
            int b = l2 == null ? 0 : l2.val;
            int sum=a+b+carry;
            carry=sum/10;
            sum=sum%10;
            curr.next=new ListNode(sum);

            curr=curr.next;
            if (l1!=null){
                l1=l1.next;
            }
            if (l2!=null){
                l2=l2.next;
            }
        }
        //两个链表都遍历完了之后,如果有进位1,则补一个进位
        if (carry==1){
            curr.next=new ListNode(carry);
        }
        return pre.next;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/6/17 上,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路:
    • 代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档