题解 | #牛群的能量值#
牛群的能量值
https://www.nowcoder.com/practice/fc49a20f47ac431981ef17aee6bd7d15
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) {
// write code here
ListNode dummy = new ListNode(0); // 创建虚拟头节点
ListNode cur = dummy; // 当前节点
int carry = 0; // 进位
while (l1 != null || l2 != null) {
int val1 = l1 != null ? l1.val : 0;
int val2 = l2 != null ? l2.val : 0;
int sum = val1 + val2 + carry; // 当前节点值的和
carry = sum / 10; // 计算进位
int digit = sum % 10; // 计算当前节点值
cur.next = new ListNode(digit); // 构造节点并连接到结果链表
cur = cur.next; // 移动指针
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
// 如果最后还有进位,构造进位节点并连接到结果链表
if (carry > 0) {
cur.next = new ListNode(carry);
}
return dummy.next; // 返回结果链表的头节点
}
}
题目考察的知识点:
链表操作和逆序相加。
解题方法分析:
- 首先,遍历两个链表,同时初始化一个进位carry为0,一个虚拟头节点dummy作为结果链表的起始。
- 在遍历过程中,分别取出两个链表当前节点的值,然后将它们相加,再加上之前的进位值。
- 计算当前节点的值时,需要将两个链表当前节点的值相加,再加上进位值。然后更新进位值,如果当前值大于等于10,说明需要进位,将进位值设置为1,并将当前值取模得到真实的节点值。
- 将新的节点值构造成一个节点,并将其连接到结果链表的末尾。
- 最后,遍历完两个链表后,如果进位值不为0,还需要将进位值构造成一个节点并连接到结果链表的末尾。
- 返回结果链表的虚拟头节点的下一个节点,即为最终的结果链表。