2. 两数相加

tech2023-01-06  120

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

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

题解思路:

方法: while(l1||l2),循环判断对于sum分别对l1和l2进行求和,carry进位标志为bool,不对carry进行sum/10;

函数代码:

class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int sum=0; bool carry=false;; ListNode *dummy=new ListNode(0); ListNode *p=dummy; while(l1||l2) { sum=0; if(l1) { sum=sum+l1->val; l1=l1->next; } if(l2) { sum=sum+l2->val; l2=l2->next; } if(carry) { sum++; } p->next=new ListNode(sum%10); p=p->next; carry=sum>=10?true:false; } if(l1) { sum=sum+l1->val+carry; p->next=new ListNode(sum%10); l1=l1->next; } if(l2) { sum=sum+l2->val; p->next=new ListNode(sum%10); l2=l2->next; } if(carry) { p->next=new ListNode(1); } return dummy->next; } };

解法二:重点掌握

class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *dummy=new ListNode(0); ListNode *cur=dummy; int carry=0; int sum=0; while(l1||l2) { int x=l1==NULL?0:l1->val; int y=l2==NULL?0:l2->val; sum=x+y+carry; carry=sum/10; cur->next=new ListNode(sum%10); cur=cur->next; if(l1) { l1=l1->next; } if(l2) { l2=l2->next; } } if(carry) { cur->next=new ListNode(1); } return dummy->next; } };

解法三:

class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *dummy=new ListNode(0); ListNode *cur=dummy; int carry=0; int sum=0; while(l1||l2) { if(l1&&l2) { sum=carry+l1->val+l2->val; carry=sum/10; sum=sum%10; cur->next=new ListNode(sum); cur=cur->next; l1=l1->next; l2=l2->next; } if(l1&&!l2) { sum=carry+l1->val; carry=sum/10; sum=sum%10; cur->next=new ListNode(sum); cur=cur->next; l1=l1->next; } if(l2&&!l1) { sum=carry+l2->val; carry=sum/10; sum=sum%10; cur->next=new ListNode(sum); cur=cur->next; l2=l2->next; } } if(carry) { cur->next=new ListNode(1); } return dummy->next; } };
最新回复(0)