美文网首页
2、Add Two Sum

2、Add Two Sum

作者: liuzhifeng | 来源:发表于2017-10-13 19:35 被阅读0次

题设

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

要点

  • 大数相加,注意考虑进位
  • 指针操作,注意指针是否为空

这道题本身并不难,刚开始把每一种情况分开写,反而写复杂了,导致只考虑到1次进位2次进位的情况,没有考虑一溜烟多个进位的情况(如999999999+1)。
还有就是,在写的过程中,很多地方不严谨了。比如一个指针header,在使用header=header.next之前,必须要判header!=null,否则就是一个空指针错误。
边界情况也没有判断清楚。比如一个链表为空的情况,或者多次进位的情况。。。

    public static ListNode addTwoNumbers(ListNode l1 , ListNode l2)
    {
        // 有一个链表为空的情况 
        if(l1 == null)
            return l2;
        if(l2 == null)
            return l1;
        
        // 非空
        ListNode header1 = l1;
        ListNode header2 = l2;
        ListNode resultHeader = new ListNode(0);
        ListNode posi = resultHeader; // 不断移动增加结果链表
        int carry = 0; // 进位
        
        while(header1 != null || header2 != null)
        {
            int sum = 0;
            if(header1 != null) // 注意这里的判断
                sum += header1.val;
            if(header2 != null)
                sum += header2.val;
            sum += carry;
            
            if(sum >= 10) // 进位
            {
                ListNode add = new ListNode(sum % 10);
                posi.next = add;
                posi = posi.next;
                carry = 1;
            }
            else // 不进位
            {
                ListNode add = new ListNode(sum);
                posi.next = add;
                posi = posi.next;
                carry = 0;
            }
            if(header1 != null) // 注意要保证非null,才能继续用next,不然就是一个空指针错误!
                header1 = header1.next;
            if(header2 != null)
                header2 = header2.next;
        }
        if(carry == 1) // 可能最后会增加新的一位
            posi.next = new ListNode(1);
        
        return resultHeader.next;

相关文章

  • array

    1 Two Sum 2 Add Two Numbers 3 Longest Substring Without R...

  • LeetCode解题-Swift

    1. Two Sum 2. Add Two Numbers 3.Longest Substring Without...

  • 2、Add Two Sum

    题设 要点 大数相加,注意考虑进位 指针操作,注意指针是否为空 这道题本身并不难,刚开始把每一种情况分开写,反而写...

  • LeetCode题目按公司分类

    [LeetCode题目按公司分类]Amazon(41) 1 Two Sum 23.0% Easy 2 Add Tw...

  • Leetcode_Python_2.0

    1. Two Sum 难度: Easy 思路:用空间复杂度换取时间复杂度,字典 2. Add Two Number...

  • Leetcode67-Add Binary(Python3)

    67. Add Binary Given two binary strings, return their sum...

  • (二) Add Two Sum

    题目 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新...

  • 2 add two numbers

    title: Add Two Numberstags:- add-two-numbers- No.2- mediu...

  • X Sums

    Two Sum It is not easy to write Two-Sum right for the fir...

  • 2. Add Two Numbers

    Leetcode: 2. Add Two NumbersYou are given two non-empty l...

网友评论

      本文标题:2、Add Two Sum

      本文链接:https://www.haomeiwen.com/subject/dghtuxtx.html