题解 | #牛群的能量值#
牛群的能量值
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) {
ListNode dummy = new ListNode(-1);
ListNode cur = dummy;
int carry = 0;
while (l1 != null || l2 != null) {
int sum = carry;
if (l1 != null) {
sum += l1.val;
l1 = l1.next;
}
if (l2 != null) {
sum += l2.val;
l2 = l2.next;
}
carry = sum / 10;
cur.next = new ListNode(sum % 10);
cur = cur.next;
}
if (carry > 0) {
cur.next = new ListNode(carry);
}
return dummy.next;
}
}
使用java解题
知识点:遍历链表
思路:
使用一个虚拟节点dummy来简化对合并链表头部的处理。在循环中,同时遍历两个链表,将对应节点的值与进位相加得到sum,然后创建一个新节点cur.next,将sum的个位数作为新节点的值,将cur指向新节点,同时更新进位carry。最后,如果还存在进位,即carry > 0,则创建一个值为carry的新节点连接到新链表的末尾。最终返回虚拟节点dummy的下一个节点,则为合并后的链表的头部。
这种优化可以减少代码冗余,并且能够处理更多的测试用例,包括两个链表长度不等的情况。同时,不修改输入的链表节点的值,而是创建新的节点,在一些情况下也更加安全。

查看27道真题和解析
