leetcode2:两数相加

mac2022-06-30  26

题目: 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 解决方法:先在末尾补零,把两个链表补为一样的长度,然后两个链表对应位置相加,并记录进位。

class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* p = l1; ListNode* q = l2; int len1 = 1; int len2 = 1; while(p->next != NULL){ len1++; p = p->next; } while(q->next != NULL){ len2++; q = q->next; } if(len1>=len2){ for(int i=0;i<len1-len2;i++){ q->next = new ListNode(0); q=q->next; } } else{ for(int j=0;j<len2-len1;j++){ p->next = new ListNode(0); p=p->next; } } ListNode* head1 = l1; ListNode* head2 = l2; ListNode* l3 = new ListNode(0); ListNode* head3 = l3; int count = 0; //记录进位 int val1; while((head1!=NULL)&&(head2!=NULL)){ val1 = count+head1->val+head2->val; head3->next = new ListNode(val1); count = (val1>=10)?1:0; head1 = head1->next; head2 = head2->next; head3 = head3->next; } if(count==1){ head3->next = new ListNode(1); } return l3->next; } };

欢迎提出批评和指正。

最新回复(0)