首页 > 其他分享 >LeetCode02 两数相加

LeetCode02 两数相加

时间:2022-09-27 16:35:54浏览次数:54  
标签:ListNode 相加 next current sumVal LeetCode02 carry null

02

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode resultList = new ListNode();
    ListNode current = resultList;

    ListNode p1 = l1;
    ListNode p2 = l2;
    boolean carry = false;

    while (p1 != null && p2 != null) {
        int sumVal = p1.val + p2.val;
        //分 有进位和无进位 的情况考虑
        if (carry) {
            sumVal = sumVal + 1;
        }
        if (sumVal >= 10) {
            carry = true;
        } else {
            carry = false;
        }
        //这里先移动current再赋值,这样的话头结点就是空的
        current.next = new ListNode();
        current = current.next;

        current.val = sumVal % 10;
        p1 = p1.next;
        p2 = p2.next;
    }
    while (p1 != null) {
        int sumVal = p1.val;
        if (carry) {
            sumVal = sumVal + 1;
        }
        if (sumVal >= 10) {
            carry = true;
        } else {
            carry = false;
        }
        current.next = new ListNode();
        current = current.next;

        current.val = sumVal % 10;
        p1 = p1.next;
    }
    while (p2 != null) {
        int sumVal = p2.val;
        if (carry) {
            sumVal = sumVal + 1;
        }
        if (sumVal >= 10) {
            carry = true;
        } else {
            carry = false;
        }
        current.next = new ListNode();
        current = current.next;

        current.val = sumVal % 10;
        p2 = p2.next;
    }
    if (carry) {
        current.next = new ListNode();
        current = current.next;

        current.val = 1;
    }
    return resultList.next;
}

利用三元运算符?:,并且null补0,让代码更简洁可读

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode pre = new ListNode(0);
        ListNode cur = pre;
        int carry = 0;

        while (l1 != null || l2 != null) {
            int v1 = l1 == null ? 0 : l1.val;
            int v2 = l2 == null ? 0 : l2.val;
            int sum = v1 + v2 + carry;

            carry = sum / 10;
            int nextVal = sum % 10;
            cur.next = new ListNode(nextVal);
            cur = cur.next;

            l1 = l1 == null ? null : l1.next;
            l2 = l2 == null ? null : l2.next;
        }
        if (carry > 0) {
            cur.next = new ListNode(carry);
        }
        return pre.next;
    }

标签:ListNode,相加,next,current,sumVal,LeetCode02,carry,null
From: https://www.cnblogs.com/jrjewljs/p/16734990.html

相关文章

  • 力扣445(java&python)-两数相加Ⅱ(中等)
    题目:给你两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字0之外......
  • 力扣2(java&python)-两数相加(中等)
    题目:给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表......
  • 刷题笔记(leetcode02-两数相加)
    普通的循环解法,C代码:1/**2*Definitionforsingly-linkedlist.3*structListNode{4*intval;5*structListNode*next;6*};7......
  • JAVA 用for/while循环打印1-100相加
    1.for循环:publicclasstest1{publicstaticvoidmain(String[]args){intsum=0;for(inti=1;i<=100;i++){sum+=i;}......
  • LetCode算法--2.两数相加
    给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和......
  • 两数相加
    题目给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表......
  • 【视频】什么是非线性模型与R语言多项式回归、局部平滑样条、 广义相加GAM分析工资数
    全文链接:http://tecdat.cn/?p=9706原文出处:拓端数据部落公众号在这文中,我将介绍非线性回归的基础知识。非线性回归是一种对因变量和一组自变量之间的非线性关系进行建模......
  • leetcode415_字符串相加
    字符串相加模拟手算:(1)注意对其最低项(2)注意进位publicStringaddStrings(Stringnum1,Stringnum2){inti=num1.length()-1;intj=num2.......
  • PHP与JS互相加密解密方法2.0【转载】
    本文转自:https://blog.csdn.net/qq_32845825/article/details/123705487前言:之前写过一个加密解密1.0版本的,但是随着PHP版本升级,那个不能用了,当初使用的是PHP5中的mcrypt......
  • leetcode2-两数相加
    两数相加循环,每次相加都new一个新的节点classSolution{publicListNodeaddTwoNumbers(ListNodel1,ListNodel2){ListNodehead=null,tail=nu......