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; } };