题解 | #牛群的能量值#

牛群的能量值

https://www.nowcoder.com/practice/fc49a20f47ac431981ef17aee6bd7d15

  1. 题目考察的知识点

链表的遍历,增删查改的操作,以及递归

  1. 题目解答方法的文字分析

思路:由于输入的两个链表都是逆序存储数字的位数的,因此两个链表中同一位置的数字可以直接相加。我们同时遍历两个链表,逐位计算它们的和,并与当前位置的进位值相加。 即每次把两个节点值 l1.val, l2.val与进位值carry 相加,除以 10 的余数即为当前节点需要保存的数位,除以 10 的商即为新的进位值。 由于整个加法本质是由多个结点相加的子问题结合而成,所以可以用递归来解决。

  1. 本题解析所用的编程语言

java

  1. 完整且正确的编程代码
import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param l1 ListNode类 
     * @param l2 ListNode类 
     * @return ListNode类
     */
    public ListNode addEnergyValues (ListNode l1, ListNode l2) {
        return addValue(l1,l2,0);
    }
    //递归完成每一位的加法
    public ListNode addValue(ListNode l1, ListNode l2,int carry){
        //如果l1和l2都是空的,那么由进位carry来决定是返回结点还是null
        if(l1==null&&l2==null){
            return carry!=0?new ListNode(carry):null;
        }
        //当l1和l2中有一个为空时,为了简化操作,统一将l2设为不为空的那个,那就不需要分别为l1为空和l2为空的情况都做处理
        if(l2==null){
            l2=l1;
            l1=null;
        }
        //计算总值,然后总值%10的值为和的当前位的值,总值/10为进位carry的值
        carry+=l2.val+(l1!=null?l1.val:0);
        l2.val=carry%10;
        l2.next=addValue(l2.next,(l1!=null?l1.next:null),carry/10);
        return l2;
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务