考察链表双指针遍历的情况,需要先了解竖式加法的形式,从低位对齐相加到高位。中间有进位需要单独加上。题目描述中头结点就是低位,所以直接从头开始计算即可。
所以该题主要在于模拟,套用了链表的形式。
注意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; } }