题解 | #牛群的能量值#java
牛群的能量值
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(-1);
ListNode curr = dummy;
int carry = 0;
while (l1 != null || l2 != null) {
int x = (l1 != null) ? l1.val : 0;
int y = (l2 != null) ? l2.val : 0;
int sum = x + y + carry;
carry = sum / 10;
int digit = sum % 10;
curr.next = new ListNode(digit);
curr = curr.next;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
if (carry > 0) {
curr.next = new ListNode(carry);
}
return dummy.next;
}
}
我们首先定义了链表节点的类 ListNode。然后创建了一个方法 addTwoNumbers,用于逆序相加两个链表表示的数字。
在 addTwoNumbers 方法中,我们创建了一个哑节点 dummy,用来保存结果链表的头节点。然后使用指针 curr 指向当前节点。
通过循环遍历两个链表的节点,按照逆序方式依次相加。同时使用变量 carry 来记录进位值。
具体操作如下:
- 如果当前节点非空,则取当前节点的值作为加数;否则,视为加数为 0。
- 同样地,我们对第二个链表也进行同样的操作。
- 将两个节点的值以及上一次的进位值相加,得到当前位的和以及新的进位值。
- 将和的个位数作为结果链表的新节点,并将指针
curr指向该节点。 - 更新指针
l1和l2到下一个节点。 - 重复上述步骤,直到两个链表全部遍历完。
最后,如果还存在进位值,需要额外添加一个节点来表示进位。
返回哑节点 dummy 的下一个节点,即为表示和的链表的头节点。
该题知识点包括:
- 链表是一种常见的数据结构,它由节点组成,每个节点包含一个值和一个指向下一个节点的指针。
