_david李dvd

导航

Add Two Numbers (c#)

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

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

简单来说就是将两个单个数字的单链表相加,但是这个有一个问题,如果两个数字相加大于等于10,则将和的个位保留到此节点,下个节点多加1;

链表长度不限,且可以为空(一个链表或者两个同时为空)。

由于我是小白,做这道题时链表基本不懂,所以就直接参考了优秀解法。。。

public class ListNode
        {
            public int val;
            public ListNode next;
            public ListNode(int x) { val = x; }
        }

        public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
        {
            ListNode c1 = l1;
            ListNode c2 = l2;
            ListNode head = new ListNode(0);
            ListNode p = head;
            int sum = 0;
            while (c1!=null ||c2!=null )
            {
                sum /= 10;
                if (c1!=null)
                {
                    sum += c1.val;
                    c1 = c1.next;
                }
                if (c2!=null)
                {
                    sum += c2.val;
                    c2 = c2.next;
                }
                p.next = new ListNode(sum % 10);
                p = p.next;

            }

            if (sum/10==1)
            {
                p.next = new ListNode(1);
            }
            return head.next;
        }

我的理解:先声明一个空的头节点head,循环将2个链表的头节点加给值sum,并将sum除以10的余数赋值给之前申明的空节点p,加完之后再将链表的下个节点加给sum除以10的值,直到链表没有下一个节点位置,同时p指向下一节点。

当sum为10时,p的下一个节点值为1。

posted on 2016-01-06 21:25  _david李dvd  阅读(327)  评论(0)    收藏  举报