题解 | #牛群的能量值#
牛群的能量值
https://www.nowcoder.com/practice/fc49a20f47ac431981ef17aee6bd7d15
- 题目考察的知识点
链表的遍历,增删查改的操作,以及递归
- 题目解答方法的文字分析
思路:由于输入的两个链表都是逆序存储数字的位数的,因此两个链表中同一位置的数字可以直接相加。我们同时遍历两个链表,逐位计算它们的和,并与当前位置的进位值相加。 即每次把两个节点值 l1.val, l2.val与进位值carry 相加,除以 10 的余数即为当前节点需要保存的数位,除以 10 的商即为新的进位值。 由于整个加法本质是由多个结点相加的子问题结合而成,所以可以用递归来解决。
- 本题解析所用的编程语言
java
- 完整且正确的编程代码
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;
}
}