解题思路:
两个数使用链表表示,所以如果想转为数值类型,处理的值的大小可能会超出int甚至long,所以应当仍按照链表处理,掌握好进位即可。
方法一:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int jinwei = 0;//存放进位
int n1=0,n2=0;//分别为列表l1和l2遍历取出的数
ListNode list = new ListNode(0);//初始化链表
ListNode pointer = list;
while ((l1!=null || l2!=null || jinwei!=0)){
//遍历取数
if(l1!=null){n1=l1.val;l1=l1.next;}
else {n1=0;}
if(l2!=null){n2=l2.val;l2=l2.next;}
else {n2=0;}
//要记得加进位
int sum=n1+n2+jinwei;
//计算本次相加是否有进位
if(sum>9){jinwei=1;sum=sum-10;}
else {jinwei=0;}
ListNode abs = new ListNode(sum);
pointer.next=abs;
pointer=pointer.next;
}
return list.next;
}
}