43,401
社区成员
发帖
与我相关
我的任务
分享
/**
* 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;//申请尾节点
//上面的申请方式是申请链表的常用方式,head,tail一块申请。
int carry=0; //用carry定义进位数
while( l1 || l2)//用循环来查找l1,和l2链表
{
int n1 = l1 ? l1->val : 0;//查找链表l1中每一个节点的值,非空就赋值给n1
int n2 = l2 ? l2->val : 0;//同上
int sum = n1 + n2 + carry;//两数相加
if(!head)//看头节点是否为空,为空就走下面的
{
head = tail = new ListNode(sum % 10);//给头节点赋值,大于10取余,我们只要个位的数字
}
else//头节点不为空,就通过尾节点不断给新链表后面加入新值
{
tail->next = new ListNode(sum % 10);//给尾节点赋值,大于10取余,我们只要个位的数字
tail = tail->next;//将节点移到下一位
}
carry = sum / 10;//进位数,看看进了几位,后面都要加上去
if (l1)//如果L1链表不为空执行下面操作
{
l1 = l1->next;//移动节点
}
if (l2)//如果L2链表不为空执行下面操作
{
l2 = l2->next;//移动节点
}
}
//循环结束
if (carry > 0)//可能会出现最后carry不为零的现象,这时候要在进一位
{
tail->next = new ListNode(carry);//在新链表后面在加一位,值为carry的值
}
return head;//返回新链表的头节点
}
};
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2){
//省略
}
ListNode *head=nullptr;//申请头节点
ListNode *tail=nullptr;//申请尾节点
int n1 = l1 ? l1->val : 0;//查找链表l1中每一个节点的值,非空就赋值给n1
if(!head)//看头节点是否为空,为空就走下面的
{
head = tail = new ListNode(sum % 10);//给头节点赋值,大于10取余,我们只要个位的数字
}
else//头节点不为空,就通过尾节点不断给新链表后面加入新值
{
tail->next = new ListNode(sum % 10);//给尾节点赋值,大于10取余,我们只要个位的数字
tail = tail->next;//将节点移到下一位
}
if (l1)//如果L1链表不为空执行下面操作
{
l1 = l1->next;//移动节点
}
return head;//返回新链表的头节点