给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
这道题要求用链表做,正常做用数组相信大家都会,链表法看了一下官方解法,比我自己做的工整多了,自己写了几遍加个注释放在这里
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* head=nullptr;//定义头节点为空
ListNode* tail=nullptr;
int carry=0,sum=0;
while(l1||l2){
int n1=l1?l1->val:0;//l1有value,取出给n1;
int n2=l2?l2->val:0;
sum=n1+n2+carry;
if(!head){//头节点为空,新链表没有结点
head=tail=new ListNode(sum%10);//插入新节点,值为sum%10
}else{//有头节点,后续结点插入
tail->next=new ListNode(sum%10);//尾结点后插入
tail=tail->next;
}
carry=sum/10;//进位值
if(l1){//l1还有节点继续访问
l1=l1->next;
}
if(l2){
l2=l2->next;
}
}
if(carry>0){//最后一个进位制放到链表最后
tail->next=new ListNode(carry);
tail=tail->next;
}
return head;//返回头节点即可
}
};
本文介绍了一种使用链表而非数组来实现两个大数相加的方法。通过定义链表节点并迭代输入链表,逐位进行加法运算,并处理进位情况,最终形成新的链表表示相加结果。
1014

被折叠的 条评论
为什么被折叠?



