你须要的LeeCode题No.02——“两数相加”_一点课堂(多岸学院)

两数相加

题目:两数相加java

描述:描述:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,而且它们的每一个节点只能存储 一位 数字。若是咱们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您能够假设除了数字 0 以外,这两个数都不会以 0 开头。git

示例:github

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

解析

这个题目相对基础不少,就是两个单链表的处理,咱们只要注意进位便可。不过咱们要处理好几种特殊状况:ide

  1. 当两个链表为 (4 -> 5) 和 (4 -> 5) 时,由于进位缘由,因此结果为 (8 -> 0 -> 1)
  2. 当两个链表为 (4 -> 4) 和 (4 -> 5 -> 1) 时,由于两个链表长度不一样,因此结果为 (8 -> 9 -> 1)

只要注意处理好以上问题,其它都是常规操做,一块儿看下参考代码吧:学习

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    // 用来标记返回结果的头结点,增长一个无效结点可使代码简单
    ListNode result = new ListNode(-1);

    // 记录当前位置的值
    int cur = 0;
    // 进位标志
    int identify = 0;
    // 用另外一个结点来构建链表,这样就不会丢失头结点指针了
    ListNode resultHandle = result;

    // 避免长度不一致
    while (l1!=null || l2!=null){
        int a = l1!=null?l1.val:0;
        int b = l2!=null?l2.val:0;
        // 计算当前值
        cur = a + b + identify;
        // 更新进位标志
        identify = cur/10;
        // 更新当前值
        cur %= 10;
        
        // 当前值存入链表
        resultHandle.next = new ListNode(cur);
        if(l1!=null){
            l1 = l1.next;
        }
        if(l2!=null){
            l2 = l2.next;
        }
        resultHandle = resultHandle.next;
    }
    
    // 注意进位
    if(identify!=0){
        resultHandle.next = new ListNode(identify);
    }

    // 去除无效头结点
    return result.next;
}

总结

好了,本次题目就是这么简单,主要在于细致,处理好各类边界问题就好。之后我会对题目进行适当的筛选,尽可能分享一些可以给咱们启发的题目。不过所有的题目都会上传到个人github。指针

下题预告

题目:无重复字符的最长子串code

描述:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。blog

示例:图片

  • 输入: "abcabcbb"
  • 输出: 3
  • 解释: 由于无重复字符的最长子串是 "abc",因此其长度为 3。

相关源码请加QQ获取。资源


【感谢您能看完,若是可以帮到您,麻烦点个赞~】

更多经验技术欢迎前来共同窗习交流: 一点课堂-为梦想而奋斗的在线学习平台 http://www.yidiankt.com/

![关注公众号,回复“1”免费领取-【java核心知识点】] file

QQ讨论群:616683098

QQ:3184402434

想要深刻学习的同窗们能够加我QQ一块儿学习讨论~还有全套资源分享,经验探讨,等你哦! 在这里插入图片描述

相关文章
相关标签/搜索