B站讲的很好的视频:
【从零开始刷力扣学C++——第二题:两数相加】 www.bilibili.com/video/BV1mP…
题目
知识点
1.链表
* Definition for singly-linked list.
* struct ListNode {
* int val;//节点的数据值
* ListNode *next;//节点的指针域
//构造函数
//无参构造函数,创建一个值为0、后继为空的节点。
* ListNode() : val(0), next(nullptr) {}
//接受一个整数,将节点值设为 x,后继为空。
* ListNode(int x) : val(x), next(nullptr) {}
//接受一个整数和一个 next 指针,初始化节点值和下一个节点。
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
2.三目运算符
题解
* Definition for singly-linked list.
* struct ListNode {
* int val;//节点的数据值
* ListNode *next;//节点的指针域
//构造函数
//无参构造函数,创建一个值为0、后继为空的节点。
* ListNode() : val(0), next(nullptr) {}
//接受一个整数,将节点值设为 x,后继为空。
* ListNode(int x) : val(x), next(nullptr) {}
//接受一个整数和一个 next 指针,初始化节点值和下一个节点。
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *head = nullptr;//创建head链表存储结果
ListNode *p = nullptr;//head链表的尾节点
int carry = 0;//用于进位
while( l1 || l2 ){//当l1和l2都不为空
int n1 = l1 ? l1->val : 0;
int n2 = l2 ? l2->val : 0;
int sum = n1 + n2 + carry;
if(!head){//如果 head 为空,说明结果链表还没有任何节点(即第一次创建节点)。
head = p = new ListNode( sum%10 );
}else{//如果 head 不为空,说明链表已有节点。
p->next = new ListNode( sum%10 );
p = p->next;
}
carry = sum/10;
if(l1){//l1不为空则继续下一个数
l1 = l1->next;
}
if(l2){//l2不为空则继续下一个数
l2 = l2->next;
}
}//while
//算完了之后,carry大于0则继续进位,head链表新增节点
if( carry > 0 ){
p->next = new ListNode(carry);
}
return head;//返回head链表
}
};