每日一题之链表求和

在这里插入图片描述

解题思路

  • 创建一个carry变量存储节点相加的进位。
  • 通过while循环将两个链表的节点同进位依次相加,然后将获得的 sum % 10后赋值给新创建的节点。
  • 当遍历结束后,判断是否有剩余的carry或者链表。有的话继续让carry和链表进行计算。计算后将剩余的链表直接加到start节点的后面
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */

function addTwoNumbers(l1: ListNode | null, l2: ListNode | null): ListNode | null {
    const res = new ListNode();
    let start = res;
    let carry = 0;
    while (l1 && l2) {
        let sum = l1.val + l2.val + carry;
        carry = sum > sum % 10 ? 1 : 0;
        start.val = sum % 10;
        l1 = l1.next;
        l2 = l2.next;
        if (l1 && l2) {
            start.next = new ListNode();
            start = start.next;
        }
    };
    if (!l1 && !l2) {
        if(carry){
             start.next = new ListNode(1);
        }
        return res;
    }
    start.next = new ListNode();
    start = start.next;
    const residue = l1 ? l1 : l2;
    let __residue = residue;
    while (__residue && carry) {
        let sum = __residue.val + carry;
        carry = sum > sum % 10 ? 1 : 0;
        __residue.val = sum % 10;
        if (!__residue.next && carry) {
            __residue.next = new ListNode(carry);
            break;
        }
        __residue = __residue.next;
    }
    start.val = residue.val;
    start.next = residue.next;
    return res;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值