LeetCode刷题日记 2. 两数相加

    科技2022-07-13  128

    题目给出两个链表,两个分别展示两个以逆序形式表示的十进制数,要求返回一个链表,以逆序形式表示这两个十进制数的和。这道题主要难点有两个,一个是当两个数位数不同的情况如何考虑,另一个是当末尾还需进位的时候需要再加一。根据条件,我们创造第三个链表head作为两个链表的和,代码如下:

    /** * 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 *head = new ListNode (-1); ListNode *h = head; int sum = 0; //计算和 int carry = 0; //计算进位 while(l1 != NULL || l2 != NULL) //当链表l1和链表l2均为空时,循环停止 { sum = 0; //将和的值初始化 if(l1 != NULL) { sum += l1 -> val; //提取当前位置链表的值 l1 = l1 -> next; //提取之后将链表挪到下一个值 } if(l2 != NULL) { sum += l2 -> val; l2 = l2 -> next; } if(carry == 1) sum++; //将进位加到和中 h -> next = new ListNode(sum); h = h -> next; if(sum >= 10) carry = 1; //判断下一位是否需要进位 else carry = 0; } if(l1==NULL && l2 == NULL && carry == 1) h -> next = new ListNode(1); return head -> next; } };

     

    Processed: 0.013, SQL: 8