给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:
    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807

    来源:力扣(LeetCode) 链接:> https://leetcode-cn.com/problems/add-two-numbers 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    1. public class Q2 {
    2. public static void main(String[] args) {
    3. ListNode a = new ListNode(5);
    4. ListNode b = new ListNode(4);
    5. ListNode c = new ListNode(3);
    6. ListNode d = new ListNode(4);
    7. a.next = b;
    8. b.next = c;
    9. c.next = d;
    10. ListNode a1 = new ListNode(5);
    11. ListNode b1 = new ListNode(6);
    12. ListNode c1 = new ListNode(4);
    13. ListNode d1 = new ListNode(4);
    14. a1.next = b1;
    15. b1.next = c1;
    16. c1.next = d1;
    17. print(a);
    18. print(a1);
    19. ListNode node = new Q2().addTwoNumbers(a, a1);
    20. print(node);
    21. }
    22. public ListNode addTwoNumbers(Q2.ListNode l1, Q2.ListNode l2) {
    23. int f = 0;
    24. ListNode node = new ListNode(0);
    25. ListNode cur = node;
    26. while (l1 != null || l2 != null || f != 0) {
    27. int v1 = 0, v2 = 0;
    28. if (l1 != null) {
    29. v1 = l1.val;
    30. l1 = l1.next;
    31. }
    32. if (l2 != null) {
    33. v2 = l2.val;
    34. l2 = l2.next;
    35. }
    36. int sum = v1 + v2 + f;
    37. f = sum / 10;
    38. cur.next = new ListNode(sum % 10);
    39. cur = cur.next;
    40. }
    41. return node.next;
    42. }
    43. static class ListNode {
    44. int val;
    45. ListNode next;
    46. ListNode(int x) {
    47. val = x;
    48. }
    49. }
    50. /**
    51. * 辅助方式,输出链表
    52. */
    53. private static void print(ListNode node) {
    54. System.out.print("[");
    55. while (node != null) {
    56. System.out.print(node.val + "->");
    57. node = node.next;
    58. }
    59. System.out.println("]");
    60. }
    61. }