题目
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。文章来源:https://www.toymoban.com/news/detail-633378.html
思路
建立链表l3,同时遍历两个链表,对每个节点的数相加,如果一个链表遍历完,停止遍历让它节点代表的数置为0,直到两个数都遍历完。设置一个进位标记,当链表遍历结束但进位标记不为0,则表示多出一位进位,再创立一个节点接受进位。文章来源地址https://www.toymoban.com/news/detail-633378.html
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *x1=l1,*x2=l2,*l3,*pre,*last;
int sum,carry=0,a,b;
l3=new ListNode(0);
pre=l3;
last=NULL;
while(x1||x2){
if(x1==NULL){
a=0;
}else{
a=x1->val;
}
if(x2==NULL){
b=0;
}else{
b=x2->val;
}
sum=a+b+carry;
carry=sum/10;
if(last!=NULL){
pre=new ListNode(0);
pre->val=sum%10;
last->next=pre;
}else{
pre->val=sum%10;
}
last=pre;
if(x1!=NULL){
x1=x1->next;
}
if(x2!=NULL){
x2=x2->next;
}
}
if(carry>0){
pre=new ListNode(carry);
last->next=pre;
}
return l3;
}
};
到了这里,关于两数相加 LeetCode热题100的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!