< Summary

Information
Class: LeetCode.Algorithms.AddTwoNumbers2.AddTwoNumbers2Reverse
Assembly: LeetCode
File(s): D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\AddTwoNumbers2\AddTwoNumbers2Reverse.cs
Line coverage
100%
Covered lines: 43
Uncovered lines: 0
Coverable lines: 43
Total lines: 85
Line coverage: 100%
Branch coverage
100%
Covered branches: 14
Total branches: 14
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AddTwoNumbers(...)100%1212100%
Reverse(...)100%22100%

File(s)

D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\AddTwoNumbers2\AddTwoNumbers2Reverse.cs

#LineLine coverage
 1// --------------------------------------------------------------------------------
 2// Copyright (C) 2025 Eugene Eremeev (also known as Yevhenii Yeriemeieiv).
 3// All Rights Reserved.
 4// --------------------------------------------------------------------------------
 5// This software is the confidential and proprietary information of Eugene Eremeev
 6// (also known as Yevhenii Yeriemeieiv) ("Confidential Information"). You shall not
 7// disclose such Confidential Information and shall use it only in accordance with
 8// the terms of the license agreement you entered into with Eugene Eremeev (also
 9// known as Yevhenii Yeriemeieiv).
 10// --------------------------------------------------------------------------------
 11
 12using LeetCode.Core.Models;
 13
 14namespace LeetCode.Algorithms.AddTwoNumbers2;
 15
 16/// <inheritdoc />
 17public class AddTwoNumbers2Reverse : IAddTwoNumbers2
 18{
 19    /// <summary>
 20    ///     Time complexity - O(n + m)
 21    ///     Space complexity - O(n + m)
 22    /// </summary>
 23    /// <param name="l1"></param>
 24    /// <param name="l2"></param>
 25    /// <returns></returns>
 26    public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
 327    {
 328        var dummyNode = new ListNode();
 329        var node = dummyNode;
 30
 331        var l1Node = Reverse(l1);
 332        var l2Node = Reverse(l2);
 33
 334        var remainder = 0;
 35
 1136        while (l1Node != null || l2Node != null || remainder > 0)
 837        {
 838            var value = remainder;
 39
 840            if (l1Node != null)
 841            {
 842                value += l1Node.val;
 43
 844                l1Node = l1Node.next;
 845            }
 46
 847            if (l2Node != null)
 748            {
 749                value += l2Node.val;
 50
 751                l2Node = l2Node.next;
 752            }
 53
 854            if (value > 9)
 255            {
 256                remainder = 1;
 257                value -= 10;
 258            }
 59            else
 660            {
 661                remainder = 0;
 662            }
 63
 864            node.next = new ListNode(value);
 865            node = node.next;
 866        }
 67
 368        return Reverse(dummyNode.next);
 369    }
 70
 71    private static ListNode Reverse(ListNode? node)
 972    {
 973        ListNode? prev = null;
 74
 3275        while (node != null)
 2376        {
 2377            var next = node.next;
 2378            node.next = prev;
 2379            prev = node;
 2380            node = next;
 2381        }
 82
 983        return prev!;
 984    }
 85}