image.png

思路1 转为数字再拼回去

image.png

  1. public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
  2. //拼接l1 l2
  3. String numStr1 = String.valueOf(l1.val);
  4. String numStr2 = String.valueOf(l2.val);
  5. while(l1.next!=null){
  6. numStr1+=String.valueOf(l1.next.val);
  7. l1=l1.next;
  8. }
  9. while(l2.next!=null){
  10. numStr2+=String.valueOf(l2.next.val);
  11. l2=l2.next;
  12. }
  13. //使用大数防止溢出 使用StringBuffer进行反转
  14. BigInteger num1 = new BigInteger(new StringBuffer(numStr1).reverse().toString());
  15. BigInteger num2 = new BigInteger(new StringBuffer(numStr2).reverse().toString());
  16. num1 = num1.add(num2); //这里使用add
  17. //转为string
  18. String numStr = new StringBuffer(String.valueOf(num1)).reverse().toString();
  19. //构建链表
  20. ListNode head = new ListNode(-1);
  21. ListNode dummy = head;
  22. for(int i=0;i<numStr.length();i++){
  23. head.next = new ListNode(Integer.valueOf(numStr.charAt(i)+
  24. ""));
  25. head = head.next;
  26. }
  27. return dummy.next;
  28. }

思路2 递归

image.png

  1. public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
  2. ListNode res = null;
  3. //递归终止条件
  4. if(l1==null&&l2==null)
  5. return null;
  6. if(l1==null&&l2!=null)
  7. return l2;
  8. if(l1!=null&&l2==null)
  9. return l1;
  10. //如果没有产生进位
  11. if(l1.val+l2.val<10){
  12. res = new ListNode(l1.val+l2.val);
  13. res.next = addTwoNumbers(l1.next,l2.next);
  14. }else{ //如果产生了进位 递归求三个数
  15. res = new ListNode(l1.val+l2.val-10);
  16. res.next = addTwoNumbers(l1.next,addTwoNumbers(l2.next,new ListNode(1)));
  17. }
  18. return res;
  19. }