题目描述:
示例:
此题我们一定要注意审题,数字每位按照逆序存储,要知道链表存储的正确数字才开始相加
接下来,就是解决如何相加了
- 我们知道两数相加是从个位开始,而数字刚好在链表中逆序存储,两个链表的头部正是数字最后一位数,这样就可以按链表顺序相加了
- 再就是判断是否进位,和大于10就进位,而且进位只可能是1
代码实现:
public class LeetCode2 {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead =new ListNode(-1);//虚拟头节点
ListNode prev = dummyHead;
int a = 0;//用来判断是否进位
while (l1 != null || l2 != null){//有一个不空就需要执行
int x = (l1 != null) ? l1.val : 0;
int y = (l2 != null) ? l2.val : 0;
int sum = x + y + a;
prev.next = new ListNode(sum%10);
prev = prev.next;//指针向后移动
a = sum/10;
l1 = (l1!=null) ? l1.next : null;//l1,l2也往后移一位
l2= (l2!=null) ? l2.next : null;
}
if (a > 0){//遍历结束后,a>0则需要在链表的后面附加一个节点
prev.next = new ListNode(a);
}
return dummyHead.next;
}
}