1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * ListNode *next;
    6. * ListNode() : val(0), next(nullptr) {}
    7. * ListNode(int x) : val(x), next(nullptr) {}
    8. * ListNode(int x, ListNode *next) : val(x), next(next) {}
    9. * };
    10. */
    11. class Solution {
    12. public:
    13. ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
    14. int carry=0;//进位数设置,初始时刻为0
    15. ListNode* head=NULL;//对输出链表进行初始化,若不初始化为NULL程序报错
    16. ListNode* temp=NULL;//临时链表代替head
    17. while(l1||l2){//保证两个链表仍有数组要累加
    18. int n1=l1?l1->val:0;//若链表不为空则赋值指向的值,若为空则赋值为零
    19. int n2=l2?l2->val:0;//同时
    20. int sum=n1+n2+carry;//对该位置进行加和,以此算出进位数和结果链表该位置的值
    21. carry=sum/10;//计算进位数
    22. if(!head){//如果head为空即首位第一次相加
    23. head=temp=new ListNode(sum%10);//必须先new一个空间,将new出来的空间进行赋值
    24. }else{
    25. temp->next=new ListNode(sum%10);//temp->next是指针的名字,和二叉树不同,不能直接表示空间地址
    26. temp=temp->next;//将temp进行重新赋值
    27. }
    28. if(l1){
    29. l1=l1->next;//l1链表移动
    30. }
    31. if(l2){
    32. l2=l2->next;//l1链表移动
    33. }
    34. }
    35. if(carry){
    36. temp->next=new ListNode(carry);//若到最后一位仍有进位数,再开辟一位空间存放
    37. }
    38. return head;
    39. }
    40. };