相关标签
一、题目要求
二、题解和代码实现
1.题解
2.代码实现
代码如下(示例):
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode node = new ListNode();
ListNode noded = l1;
ListNode noded2 = l2;
int add=0;//进位的值
addTwoNumbersdfs(noded,noded2,node,add);
return node.next;
}
private void addTwoNumbersdfs(ListNode noded, ListNode noded2, ListNode node,int add) {
if (noded==null && noded2== null){//递归终止条件
if(add!=0){//当遍历完两个链表后,需要查看进位是否有值,有值就要存进返回链表中
node.next = new ListNode(add);
}
return;
}
if (noded==null && noded2 != null){//当其中一个为null
int sum = noded2.val+0+add; //得到和
int val = sum % 10;//得到要存进链表的值, 大于9的数 都只存尾部数字 (10 就存0)
node.next=new ListNode(val);//存进返回链表中
node = node.next;//返回链表指针移动
add = sum/10;// 记录如果有进位 ,存储进位值
}else if (noded!=null && noded2 == null){
int sum = noded.val+0+add;
int val = sum % 10;
node.next=new ListNode(val);
node = node.next;
add = sum/10;
}else {
int sum = noded.val+noded2.val+add;
int val = sum % 10;
node.next=new ListNode(val);
node = node.next;
add = sum/10;
}
noded = noded!=null ? noded.next:null;//如果当前的值为空 要让它一直为空 ,不然 noded.next 会报错
noded2= noded2!=null ? noded2.next:null;
addTwoNumbersdfs(noded,noded2,node,add);//递归
}
}