题解 | #牛群的能量值#
牛群的能量值
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
的下一个节点,则为合并后的链表的头部。
这种优化可以减少代码冗余,并且能够处理更多的测试用例,包括两个链表长度不等的情况。同时,不修改输入的链表节点的值,而是创建新的节点,在一些情况下也更加安全。