> 简洁易懂讲清原理,讲不清你来打我~

输入两个链表,相同位置相加,进位给下一个位置,输出相加后的链表
![在这里插入图片描述](https://img-blog.csdnimg.cn/f43b7c845c334f23b959bb4694f08b97.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a352ab90fcfb4a408474475804efb83a.png)

> 模拟法

while(l1||l2)同时遍历两个链表,相同位置相加,个位数产生新节点,进位留给下一个while。
head和tail先指向第一个新节点,之后tail随着while生成的新节点扩展新链表。
较短链表到空节点时值当做0,while结束后检测carry

```cpp
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* head=nullptr,*tail=nullptr;
int carry=0;
while(l1||l2){
int sum=(l1?l1->val:0)+(l2?l2->val:0)+carry;
if(!head){
head=tail=new ListNode(sum%10);
}
else{
tail->next=new ListNode(sum%10);
tail=tail->next;
}
carry=sum/10;
if(l1)l1=l1->next;
if(l2)l2=l2->next;
}
if(carry)tail->next=new ListNode(carry);
return head;
}
};
```

> 喜欢简洁易懂还能讲清楚原理博客的小伙伴就关注关注这个非常高产的博主呀,下次再会~

posted on 2021-07-24 00:00  offer快到碗里来~  阅读(67)  评论(0)    收藏  举报