letCode-2

letCode第二题题目如下:

  给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

事实上,这一题考的就是节点和一点数学知识,分析题意:两个链表,存储两个逆序数,从头结点开始,个位对个位,十位对十位,长度不一定相等,使用链表逆序输出结果。

 

所以使用一个标志位作为进位运算,代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode * result = new ListNode(0);
        int carry = 0;
        ListNode* curr = result;
        //有进位,任意链表均有值
        while(l1!=NULL || l2 != NULL | carry!=0){
       //这里分开判断
if (l1 != NULL){ carry += l1->val; l1 = l1->next; } if(l2 != NULL){ carry += l2->val; l2 = l2->next; } ListNode* node = new ListNode(carry%10); //向下取整 carry/=10; curr->next = node; curr = node; } return result; } };
原文地址:https://www.cnblogs.com/zhangthree/p/10482334.html