题解 | #牛群的能量值#
牛群的能量值
https://www.nowcoder.com/practice/fc49a20f47ac431981ef17aee6bd7d15
题目考察的知识点:
- 单链表的基本操作,包括遍历和节点插入。
- 大数相加的处理方法。
题目解答方法的文字分析:
这道题目要求我们将两个表示非负整数的链表进行相加,并返回相加后的链表。由于链表中的数字是逆序存储的,所以我们可以按照从低位到高位的顺序相加,并注意处理进位的情况。
我们可以使用双指针的方法遍历两个链表,同时在遍历的过程中,将对应位置的数字相加,并将结果插入到新的链表中。我们使用两个指针 l1 和 l2 分别指向两个链表的当前节点,同时使用一个进位变量 carry 来保存进位值。
每次计算两个链表对应位置的和时,我们需要考虑三个数的相加:l1.val、l2.val 和 carry。计算它们的和 sum,并将 sum 的个位数插入到新链表中。然后更新 carry 为 sum 的十位数。
最后,如果两个链表的长度不同,我们需要单独处理较长链表剩余部分的数字相加,并将进位 carry 加入到结果链表的末尾。
最后,返回新链表的头节点,即为所求的结果。
本题解析所用的编程语言: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) {
ListNode head = null, tail = null;
int carry = 0;
while (l1 != null || l2 != null) {
int n1 = l1 != null ? l1.val : 0;
int n2 = l2 != null ? l2.val : 0;
int sum = n1 + n2 + carry;
if (head == null) {
head = tail = new ListNode(sum % 10);
} else {
tail.next = new ListNode(sum % 10);
tail = tail.next;
}
carry = sum / 10;
if (l1 != null) {
l1 = l1.next;
}
if (l2 != null) {
l2 = l2.next;
}
}
if (carry > 0) {
tail.next = new ListNode(carry);
}
return head;
}
}


查看8道真题和解析