考察链表双指针遍历的情况,需要先了解竖式加法的形式,从低位对齐相加到高位。中间有进位需要单独加上。题目描述中头结点就是低位,所以直接从头开始计算即可。

所以该题主要在于模拟,套用了链表的形式。

注意10行while循环判断来表示两个链表的遍历。用temp存储进位。

注意一个链表遍历完后,对于另一个链表也需要循环遍历完。

最后再去判断是否有进位,有的话还需要创建新节点 35-39行

import java.util.*;

public class Solution {

    public ListNode addEnergyValues (ListNode l1, ListNode l2) {
        // write code here
        ListNode res = new ListNode(-1);
        ListNode t = res;
        int temp = 0; //存储进位
        while(l1!=null&&l2!=null){
            int number = (l1.val + l2.val + temp)%10; 
            temp = (l1.val + l2.val + temp)/10;
            l1 = l1.next;
            l2 = l2.next;
            ListNode node = new ListNode(number);
            t.next = node;
            t = t.next;
        }
        while(l1!=null){
            int number = (l1.val + temp)%10;
            temp = (l1.val + temp)/10;
            ListNode node = new ListNode(number);
            t.next = node;
            t = t.next;
            l1 = l1.next;
        }
        while(l2!=null){
            int number = (l2.val + temp)%10;
            temp = (l2.val + temp)/10;
            ListNode node = new ListNode(number);
            t.next = node;
            t = t.next;
            l2 = l2.next;
        }
        if(temp!=0){
            ListNode node = new ListNode(temp);
            t.next = node;
            t = t.next;
        }
        return res.next;
    }
}