酒店网站开发协议wordpress免费主题排行榜

题目思路:
①创建一个int类型的局部变量,用来存储两个结点的Val值。
②判断该Val值与10求余(mod)后是否大于0,如果大于0, 则需要在下一个结点进位。
③最关键的步骤:实现l1,l2结点数值相加后构建新的存储求和后的结点.此时先创建一个head头部结点以及一个尾部结点(tail)指向头部结点,然后,让tail指向当前的tail的next用来插入下一个。这个有点不好想。
最后,循环判断两个链表是否为空,最后返回head.
题解算法 C++
  
/**
  * Definition for singly-linked list.
  * struct ListNode {
  *     int val;
  *     ListNode *next;
  *     ListNode() : val(0), next(nullptr) {}
  *     ListNode(int x) : val(x), next(nullptr) {}
  *     ListNode(int x, ListNode *next) : val(x), next(next) {}
  * };
  */
 class Solution {
 public:
     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
         ListNode* head =nullptr;
         ListNode* tail =nullptr;
         int carry = 0;
         while ((l1!=nullptr) || (l2!=nullptr))
         {
             int n1 = l1?l1->val:0;
             int n2 = l2?l2->val:0;
             int sum = n1+n2+carry;
             if(!head)//head为空
             {
                 head = tail = new ListNode(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);
             }
         }
         return head;
     }
 };
