题目:
有两个用链表表示的数,每个节点包含一个数位。
这些树为是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
给定两个链表ListNode A,ListNode B,请返回A+B的结果
思路:
用递归来实现,
递归的出口:A,B结点都为空,且进位数值也为0
注意递归传递参数的设计,先判断是否为null,是则传递null,否则传递链表的next
代码:
package LianBiao;
public class 链表加法 {
//构建节点
public static class ListNode{
ListNode next;
int value;
public ListNode(int value) {
this.value = value;
}
}
public static void main(String[] args) {
//创建两个链表
int[] arr1={7,4,0,7,5};
ListNode A=new ListNode(arr1[0]);
ListNode p=A;
for (int i = 1; i <arr1.length ; i++) {
p.next=new ListNode(arr1[i]);
p=p.next;
}
p=A;
while (p!=null){
System.out.print(p.value+" ");
p=p.next;
}
System.out.println();
int[] arr2={2,7,2,3,4};
ListNode B=new ListNode(arr2[0]);
ListNode p2=B;
for (int i = 1; i <arr2.length ; i++) {
p2.next=new ListNode(arr2[i]);
p2=p2.next;
}
p2=B;
while (p2!=null){
System.out.print(p2.value+" ");
p2=p2.next;
}
System.out.println();
//调用方法
int m=A.value+B.value;
ListNode node=jiaFa(A,B,m>=10?1:0);
while (node!=null){
System.out.print(node.value+" ");
node=node.next;
}
}
private static ListNode jiaFa(ListNode a, ListNode b, int i) {
//递归出口
if (a==null && b==null && i==0) //当a,b都没数值了,进位也为0了,结束递归
return null;
//算两个链表相对应加数的结果, value>=10?1:0 用于进位数值 value%10用于存放结果数值
int value=i;
if (a!=null){
value+=a.value;
}
if (b!=null){
value+=b.value;
}
// value%10 算结果
ListNode node=new ListNode( value%10); //创建新的节点存结果
//递归调用
node.next=jiaFa(a==null?null:a.next,b==null?null:b.next,value>=10?1:0); //注意value等于10也要进位
return node;
}
}
力扣:两数相加
/**
* 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) {
int s=0;
ListNode node=new ListNode(0),p=node;
while(l1!=null || l2!=null || s!=0){
if(l1!=null){
s=s+l1.val;
l1=l1.next;
}
if(l2!=null){
s=s+l2.val;
l2=l2.next;
}
p.next=new ListNode(s%10); //保存到结果链表的数字
p=p.next;
s/=10; //进位数字
}
return node.next;
}
}