https://leetcode-cn.com/problems/add-two-numbers

    给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位数字。

    请你将两个数相加,并以相同形式返回一个表示和的链表。

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


    解题思路比较简单

    • 就是俩个链表从左往右以此相加,长度不够的链表用0补位
    • 考虑俩数相加可能会大于10,需要保存这个进位的值(就是 (a+b)%10的取整>0),用在链表的下一个俩数相加
    • 最后在俩个链表遍历完之后,还有处理进位的值是否==1
    1. // 创建链表
    2. function ListNode(val){
    3. this.val = val
    4. this.next = null
    5. }
    6. let ln1 = new ListNode(9)
    7. let l1 = ln1;
    8. ([9,9,9,9,9,9,9]).forEach((it)=>{
    9. ln1.next = new ListNode(it)
    10. ln1 = ln1.next
    11. })
    12. let ln2 = new ListNode(9)
    13. let l2 = ln2;
    14. [9,9,9].forEach((it)=>{
    15. ln2.next = new ListNode(it)
    16. ln2 = ln2.next
    17. })
    18. const addTwoNumbers = (l1,l2)=>{
    19. let head = null,result=null
    20. let one = 0 // 近位的值
    21. while(l1||l2){
    22. let s1 = l1 ? l1.val : 0
    23. let s2 = l2 ? l2.val : 0
    24. let sum = s1 + s2 + one
    25. one = sum>=10?1:0 //
    26. let data = sum%10
    27. if(!head){
    28. head=result=new ListNode(data)
    29. }else{
    30. result.next = new ListNode(data)
    31. result = result.next
    32. }
    33. if(l1) l1 = l1.next
    34. if(l2) l2 = l2.next
    35. }
    36. if(one>0){
    37. result.next = new ListNode(one)
    38. }
    39. return head
    40. }
    41. addTwoNumbers(l1,l2)