2. 两数相加
1.链表模拟+哑巴节点
-
因为题目给出的链表顺序就是逆序的,符合加法规则,只需要按序取出元素相加即可;
-
在一个链表走到结尾时,若另一链表尚未结束,则补0继续运算;
-
使用哑巴节点,dummy节点,既能避免头节点为空的问题,也便于返回链表结果
class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* result=new ListNode(); ListNode* dump=result; int add_val=0; while(l1||l2){ int num1=l1==nullptr?0:l1->val; int num2=l2==nullptr?0:l2->val;//其中一个元素到头就补0进行计算 int now_val=num1+num2+add_val; if(now_val>=10){ now_val-=10; add_val=1; }else{ add_val=0; } result->next=new ListNode(now_val); result=result->next; if(l1)l1=l1->next; if(l2)l2=l2->next; } if(add_val){ result->next=new ListNode(add_val); result=result->next; } return dump->next; } };