zoukankan      html  css  js  c++  java
  • Add Two Numbers

    Add Two Numbers

    问题:

    You are given two linked lists representing two non-negative numbers. 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.

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

    思路:

      归并排序 最后面的操作而已

    我的代码:

    public class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            if(l1 == null) return l2;
            if(l2 == null)  return l1;
            int plus = 0;
            ListNode dummy = new ListNode(0);
            ListNode cur = dummy;
            while(l1 != null && l2 != null)
            {
                int val = plus + l1.val + l2.val;
                if(val >= 10)
                {
                    ListNode node = new ListNode(val-10);
                    cur.next = node;
                    plus = 1;
                }
                else
                {
                    ListNode node = new ListNode(val);
                    cur.next = node;
                    plus = 0;
                }
                l1 = l1.next;
                l2 = l2.next;
                cur = cur.next;
            }
            while(l1 != null)
            {
                int val = plus + l1.val;
                if(val >= 10)
                {
                    ListNode node = new ListNode(val-10);
                    cur.next = node;
                    plus = 1;
                }
                else
                {
                    ListNode node = new ListNode(val);
                    cur.next = node;
                    plus = 0;
                }
                l1 = l1.next;
                cur = cur.next;
            }
            while(l2 != null)
            {
                int val = plus + l2.val;
                if(val >= 10)
                {
                    ListNode node = new ListNode(val-10);
                    cur.next = node;
                    plus = 1;
                }
                else
                {
                    ListNode node = new ListNode(val);
                    cur.next = node;
                    plus = 0;
                }
                l2 = l2.next;
                cur = cur.next;
            }
            if(plus != 0)
            {
                ListNode node = new ListNode(1);
                cur.next = node;
            }
            return dummy.next;
        }
    }
    View Code

    学习之处:

    • 思路很简单,不过有两个地方可以进行简化,使代码看起来更加整洁 carry的获得方法,可以改成如下所示:
      int sum = carry + l1.val + l2.val;
      point.next = new ListNode(sum % 10);
      carry = sum / 10;
  • 相关阅读:
    高中教材记录
    帮我解决逆序问题的网友:@18数院啦啦啦。恶人:16 师大 很菜 刘琳(2196879114) 2:32:49 PM
    丘维声的视频地址,全部课堂
    理工医疗报销电话
    可汗化学和二项式定理的地址
    二次函数问题
    *0000181894BD*---------北大医院条形码
    三月里的小雨
    语文容易读错的字
    mongodb部署
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4387048.html
Copyright © 2011-2022 走看看