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
if (l1 == null) return l2;
if (l2 == null) return l1;
ListNode head = null, cur = null, p = l1, q = l2;
int c = 0;
while (p != null || q != null || c > 0) {
int x = (p == null ? 0 : p.val) + (q == null ? 0 : q.val) + c;
c = x / 10;
ListNode node = new ListNode(x % 10);
if (head == null) {
head = node;
cur = head;
} else {
cur.next = node;
cur = cur.next;
}
if (p != null) p = p.next;
if (q != null) q = q.next;
}
return head;
}
}
- 边界值判断,只要其中一个为null,返回另一个
- 定义新链表的头节点,用于结果返回;定义一个 cur,用于新链表的遍历创建;定义两个指针 p、q分别指向 l1和l2,用于遍历
- 定义 c 用于存储进位值
- while循环:
- 条件:只要 p或q有一个不为null,或者 c>1有进位
- 计算 p、q所在位置值的和 x,同时兼容 p、q可能为null 的情况
- 计算进位 c = x / 10
- 构建新阶节点 new ListNode(x % 10)
- 如果 head 为null,说明是第一个节点,直接 head = node,同时 cur 指向 head
- 反之, head 不为null,就将新节点node挂在 cur后面,并将 cur向后走一步
- 然后,p、q都向后走一步
- 循环结束后,返回 head