题目:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和.
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
想法:
这地方就是链表的读取操作及相应的下标移位,进行非空判断。声明一个溢出位置用作下一个链表的额外参数。
额外说明:
leetcode上的示例代码好像并没有对两个链表的容量做判断,默认两个链表都是一样的,我稍微改动了一下,分别作了判断说明,下面是代码:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode resultNode = new ListNode(0);
/**这地方声明一个当前链表,进行赋值操作,返回返回的是resultNode
* 当时没声明这个标志位,害我吃了一点苦,哎。。。
*/
ListNode currentNode = resultNode;
//定义一个标志位
int isOver = 0;
int add = 0;
while(l1 != null || l2 !=null){
//l2链表走完但是l1链表没走完
if(l2 == null && l1 != null){
add = l1.val + isOver;
}
//l1链表走完但是l2链表没走完
else if(l1 == null && l2 != null){
add = l2.val + isOver;
}else{
add = l1.val + l2.val + isOver;
}
//判断两位数相加是不是溢出操作
if(add >= 10){
add = add % 10;
isOver = 1;
}else{
isOver = 0;
}
currentNode.next = new ListNode(add);
currentNode = currentNode.next;
//开始进行指标下移
l1 = (l1 != null)?l1.next:l1;
l2 = (l2 != null)?l2.next:l2;
}
//如果两个都是一样大小的容量,判断是不是存在相加存在溢出位置
if(isOver > 0){
currentNode.next = new ListNode(isOver);
}
//头结点没用到。
return resultNode.next;
}