C#两个链表相加求和

您将获得两个非空链表,表示两个非负整数。 数字以相反的顺序存储,每个节点包含一个数字。 添加两个数字并将其作为链接列表返回。
您可以假设这两个数字不包含任何前导零,除了数字0本身。

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8  

解释:342+465=807

----------------------------------------

这是一道笔试题,要求写的是伪代码,为了加深印象,就将其完整代码写了出来

自定义链表参考上一篇文章 --  C#自定义单链表

//测试主方法,想创建两个链表,往里面添加数据(一个数字)

static void Main(string[] args)
        {
            LinkList<int> l1 = new LinkList<int>();
            l1.Add(2);
            l1.Add(4);
            l1.Add(3);
            LinkList<int> l2 = new LinkList<int>();
            l2.Add(5);
            l2.Add(6);
            l2.Add(4);
            AddTwoNumbers(l1, l2);
            Console.ReadKey();
        }

        static void AddTwoNumbers(LinkList<int> l1, LinkList<int> l2) {
            int sum = 0;

//创建两个节点,用来遍历两个链表(节点类和链表类参考上一篇文章)
            Node<int> node1 = l1.head;
            Node<int> node2 = l2.head;
            LinkList<int> l3 = new LinkList<int>();

//每次循环,sum先和l1的数据相加,再和l2中的数据相加,然后将sum存放到l3链表中,因为相加的和可能大于10

//所以每次添加到l3中要做求余运算,两数相加会产生进位,所以sum /= 10;  再进入下一次遍历

//如果l1的数据没有遍历完,或者l2中的数据没有遍历完,或者sum!=0 (此时会产生进位),循环需要继续,l3要添加数据

            while (node1 != null || node2 != null || sum != 0) {
                if (node1 != null) {
                    sum += node1.data;
                    node1 = node1.next;
                }
                if (node2 != null) {
                    sum += node2.data;
                    node2 = node2.next;
                }
                l3.Add(sum%10);
                sum /= 10;
            }
            l3.ShowAll();

//以下两种方法都可以将链表反转,方法体参见上一篇文章
            //l3.ReverseList(l3.head);
            l3.ReverseList();
        }

猜你喜欢

转载自blog.csdn.net/qq_36450306/article/details/83040280