您的位置:首页 > 其它

链表求和

2017-03-27 21:56 218 查看
描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中
相反
的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。

样例:给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null

实现思路:首先如果两个链表当中有一个是空链表,就把另一个链表原样输出。另外,还要判断两个链表当中的元素个数的多少,方便进行加和运算。当两个对应元素相加,和大于十的时候,要把十位数字写在链表的下一个位置。

代码:/**

    ListNode *addLists(ListNode *l1, ListNode *l2) {

        // write your code here

         if (l1 == NULL)

            return l2;

        if (l2 == NULL)return l1;

        int c = 0;

        int sum = 0;

        ListNode *head = new ListNode(0);

        ListNode *p = head;

        while (l1 != NULL && l2 != NULL) {

            sum = l1->val+l2->val + c;

            c = sum/10;

           sum = sum%10;

            p->next = new ListNode(sum);

            p = p->next;

            l1 = l1->next;

            l2 = l2->next;

        }

        while (l1 != NULL) {

            sum = l1->val + c;

            c = sum/10;

            sum = sum%10;

            p->next = new ListNode(sum);

            p = p->next;

            l1 = l1->next;

        }

        while (l2 != NULL) {

            sum = l2->val + c;

            c = sum/10;

            sum = sum%10;

            p->next = new ListNode(sum);

            p = p->next;

            l2 = l2->next;

        }

        if (c != 0)  p->next = new ListNode(c);

        return head->next;

    }

};

做题感想:这道题看起来很简单,可是做起来觉得并不容易。前面的几种情况还好,到了后面元素相加的时候,就一直存在着wrong answer,总是有数据通不过。后来弯弯转转才改对。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: