一天一道简单题目(2)

本文介绍了一种链表求和的算法实现,该算法接受两个表示非负整数的链表作为输入,数字以相反顺序存储,每个节点存储一个数字位。通过递归或迭代方式计算两个整数之和,并以链表形式返回结果。讨论了两种方法,一种是在原链表上修改,另一种是创建新的链表来存储结果。

给出两个表示非负整数的数字链表,数字以相反的顺序存储,每个链表都存储该非负整数某一位上的数字。计算两个非负整数的和,并以链表的方式返回。简单做个比喻:342,以链表的存储形式就是,2->4->3。

这里写图片描述

  1. 时间复杂度:O(n)。空间复杂度:O(n)。
```
public static  ListNode Addtosum(ListNode l1,ListNode l2){
        Addsum(l1,l2);
        return  l1;
 }

    public static void Addsum(ListNode l1, ListNode l2) {
        l1.val+=l2.val;
        if(l1.val>=10){
            if(l1.next==null){
                l1.next=new ListNode(0);
            }
            l1.next.val+=1;
            l1.val=l1.val%10;
        }
        if(l1.next==null&&l2.next==null){
            return;
        }else if(l1.next!=null&&l2.next==null){
            l2.next=new ListNode(0);
        }else if(l1.next==null&&l2.next!=null){
            l1.next=new ListNode(0);
        }
        Addsum(l1.next,l2.next);
    }
  1. 时间复杂度:O(Max(m, n))。 空间复杂度:O(Max(m, n))。
public static  ListNode AddNewsum(ListNode l1,ListNode l2){
        ListNode t=new ListNode(0);
        ListNode p=l1;
        ListNode q=l2;
        ListNode curr=t;
        int carry=0;
        while (p!=null||q!=null){
            int x=p!=null?p.val:0;
            int y=q!=null?q.val:0;
            int sum=x+y+carry;
            carry= sum/10;
            curr.next=new ListNode(sum%10);
            curr=curr.next;
            if(p!=null){
                p=p.next;
            }
            if(q!=null){
                q=q.next;
            }
        }
        if(carry>0){
            curr.next=new ListNode(carry);
        }
        return  t.next;
    }

“`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值