这道题直接就采用两数相加的规则,维护一个进阶值(n)即可,代码如下
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {// 新建一个值为0的头结点ListNode newHead = new ListNode(0);// 创建几个指针用于遍历链表ListNode p = l1, q = l2, r = newHead;// 两数相加进阶值int n = 0;// 遍历链表,直到遍历完两条链表while (p != null || q != null) {// 记录第一条链表结点的值int val1 = p != null ? p.val : 0;// 记录第二条链表结点的值int val2 = q != null ? q.val : 0;// 计算两数相加并加上前面的进阶值int sum = val1 + val2 + n;// 如果两数相加小于10,进阶值为0,否则为1if (sum < 10) {n = 0;} else {sum = sum % 10;n = 1;}// 新建结点并赋值ListNode node = new ListNode(sum);// 连接各个新建结点r.next = node;// 指向相加所得新链表的尾结点r = r.next;// 分别移动两条链表的指针if (p != null) {p = p.next;}if (q != null) {q = q.next;}}// 如果遍历完链表后,n > 0,即还有进阶操作未处理if (n > 0) {ListNode node = new ListNode(n);r.next = node;}// 返回相加所得链表的头结点return newHead.next;}
}
题目链接:1题单 - 力扣(LeetCode)全球极客挚爱的技术成长平台