【题目】
题目描述
有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。
测试样例:
{1,2,3},{3,2,1}
返回:{4,4,4}
【代码】
1 使用递归
import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Plus { public ListNode plusAB(ListNode a, ListNode b) { if (a == null) return b; if (b == null) return a; return plusAB(a, b, 0); } public ListNode plusAB(ListNode a, ListNode b, int sum) { if (a == null && b == null && sum == 0){ return null; } if (a != null){ sum += a.val; } if (b != null){ sum += b.val; } ListNode tempNode = new ListNode(sum % 10); a = a == null ? null: a.next; b = b == null ? null: b.next; tempNode.next = plusAB(a, b , sum / 10); return tempNode; } }
2 常规方法
import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Plus { public ListNode plusAB(ListNode a, ListNode b) { if (a == null) return b; if (b == null) return a; ListNode plusNode = new ListNode(-1); ListNode plusHead = plusNode; int shi = 0; int ge = 0; int sum = 0; int aVal = 0; int bVal = 0; while (a != null || b != null || shi != 0){ aVal = a==null ? 0 : a.val; bVal = b==null ? 0 : b.val; //每次需要加上进位值 sum = aVal + bVal + shi; //进位,若sum为个位,则进位值为0 shi = sum / 10; ge = sum % 10; ListNode tempNode = new ListNode(ge); plusNode.next = tempNode; plusNode = plusNode.next; a = a==null ? null : a.next; b = b==null ? null : b.next; } return plusHead.next; } }