两数相加(21)——单链表

题目

在这里插入图片描述

题解

class Solution {
    
    
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    
    
       
        int carry = 0;
        ListNode head = null,tail = null;
        while(l1 != null | l2 != null){
    
     
            int n1 = l1==null?0:l1.val;
            int n2 = l2==null?0:l2.val;
            int sum = n1+n2+carry;
            if(head==null){
    
    
                head = tail = new ListNode(sum%10);
            }else{
    
    
                tail.next = new ListNode(sum%10);
                tail = tail.next;
            }
            carry = sum/10;
            if(l1 != null)
                l1 = l1.next;
            if(l2 != null)
                l2 = l2.next;


        }
        if(carry > 0){
    
    
                tail.next =  new ListNode(carry);
        }
        return head;
 
    }
}

复杂度

时间复杂度:O(max(m,n))其中 m 和 n 分别为两个链表的长度。我们要遍历两个链表的全部位置,而处理每个位置只需要O(1) 的时间。

空间复杂度:O(1)。注意返回值不计入空间复杂度。

おすすめ

転載: blog.csdn.net/qq_51985653/article/details/120828774