> 簡潔易懂講清原理,講不清你來打我~

輸入兩個連結串列,相同位置相加,進位給下一個位置,輸出相加後的連結串列
![在這裡插入圖片描述](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;
}
};
```

> 喜歡簡潔易懂還能講清楚原理部落格的小夥伴就關注關注這個非常高產的博主呀,下次再會~