LeetCode2

用链表表示整数,求其相加得到的结果。
考察基本的链表操作。
因为用的是Java刷题,所以要清楚Java的链表实现。
Java用引用实现链表,其实引用和指针有很多相似的地方,只不过引用更加安全。

思路

模仿数电中的全加器设计,一个数位的计算包括:
上一位进位,本位对应的两条链表节点的数值
记录下本位的加和结果,向下一位传进位值

c1 = (p1.val + p2.val + c0) / 10;
s = (p1.val + p2.val + c0) % 10;

边界情况分析

这些边界情况有时无法全部想到,只有敲代码的时候才能全面。但是大家编程之前还是要好好考虑一下,不然代码调试起来非常花时间。

  • 一条链表为空
    直接返回另外一条链表

  • 一条链表到达了末尾,另外一条没有
    加一个判断,未到末尾的继续遍历,不过只用一条链表节点的数值加低位进位了

  • 退出循环了但是还有进位
    在末尾添加一个节点

复杂度分析

一趟遍历就可以了,所以复杂度由较长的链表决定
为O(max(m , n))

    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode p1 = l1, p2 = l2;
        if(p1 == null){
            return p2;
        }
        if(p2 == null){
            return p1;
        }
        ListNode result = new ListNode(0), p3 = result;
        int c0 = 0 , c1 = 0, s = 0;
        while (p1 != null || p2 != null) {
            if(p1 != null && p2 != null) {
                c1 = (p1.val + p2.val + c0) / 10;
                s = (p1.val + p2.val + c0) % 10;
                p1 = p1.next;
                p2 = p2.next;
            }else{
                ListNode node;
                if(p1 != null){
                    node = p1;
                    p1 = p1.next;
                }else {
                    node = p2;
                    p2 = p2.next;
                }
                c1 = (node.val + c0) / 10;
                s = (node.val + c0) % 10;
            }
            c0 = c1;
            p3.next = new ListNode(s);
            p3 = p3.next;
        }
        if(c0 != 0){
            p3.next = new ListNode(c0);
        }
        return result.next;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 两数相加 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一...
    丹青水阅读 2,144评论 0 0
  • You are given two non-empty linked lists representing two...
    lemooon阅读 1,036评论 0 0
  • 健安堂成立于2015年7月8日,是一家以高端理疗技术为载体的养生理疗店。短短两年时间,加盟店遍布广...
    无怨无悔_ab5b阅读 3,514评论 0 0
  • HashMap 概述 HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作,并允...
    一只好奇的茂阅读 3,607评论 0 19
  • 我们都知道不管是什么东西进入黑洞以后都会变成分子,但是你是否想过?宇宙黑洞也许连接另一个世界。那么我们大胆猜想一下...
    白孤阅读 2,985评论 3 4

友情链接更多精彩内容