Пример #1
0
        public void Test1()
        {
            var list1 = new ListNode(2)
            {
                next = new ListNode(4)
                {
                    next = new ListNode(3)
                }
            };

            var list2 = new ListNode(5)
            {
                next = new ListNode(6)
                {
                    next = new ListNode(4)
                }
            };

            var output = new ListNode(7)
            {
                next = new ListNode(0)
                {
                    next = new ListNode(8)
                }
            };

            Assert.Equal(output, new Solution().AddTwoNumbers(list1, list2));
        }
Пример #2
0
        public void Test3()
        {
            var list1 = new ListNode(0);

            var list2 = new ListNode(0);

            var output = new ListNode(0);

            Assert.Equal(output, new Solution().AddTwoNumbers(list1, list2));
        }
Пример #3
0
    public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
    {
        ListNode root = null, cnt = null;

        void Concat(ListNode node)
        {
            if (root == null)
            {
                root = cnt = node;
            }
            else
            {
                cnt.next = node;
                cnt      = node;
            }
        }

        int up = 0;

        while (true)
        {
            var value = up + (l1?.val ?? 0) + (l2?.val ?? 0);
            if (l1 == null && l2 == null && up == 0)
            {
                break;
            }
            else
            {
                up = 0;
                if (value >= 10)
                {
                    up     = value / 10;
                    value %= 10;
                }

                Concat(new ListNode(value));
            }

            l1 = l1?.next;
            l2 = l2?.next;
        }

        return(root);
    }