概述
这是leetcode的第二题,两数相加,题目传送门
做这一题首先要明白,数据在链表中逆序存储,那么我们顺着链表的方向看,就是先低位后高位,这是一件好事。我们用竖式做加法的时候,也是末位对齐,那么我们只要从链表的头部开始加,就是相当于末位对齐加了。
其次是进位的处理,最后一次还有进位如何处理,可以在最后判断,也可以在循环的时候就直接处理,有进位我就继续循环做加法,把进位加到最高位。这种代码简短一些:
/**
* 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* root = new ListNode(); //最后要返回结果的头指针,所以新建一个头部指针,最后返回结果用
ListNode* curr = root; //当前指针
int t = 0;
while(l1 || l2 || t!=0){ //只要l1和l2还没空,或者还有进位就继续做加法
if(l1){
t += l1->val;
l1 = l1->next; //处理下一个数
}
if(l2){
t += l2->val;
l2 = l2->next;
}
curr->next = new ListNode(t % 10); //得到的结果放在当前指针的尾部
curr = curr->next; //指针后移,确保curr是当前的最新位置
t /= 10; //进位
}
return root->next; //root本身不是计算结果,他的下一个才是
}
};
或者把进位放到最后,改变不大
/**
* 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* root = new ListNode();
ListNode* curr = root;
int t = 0;
while(l1 || l2){
if(l1){
t += l1->val;
l1 = l1->next;
}
if(l2){
t += l2->val;
l2 = l2->next;
}
curr->next = new ListNode(t % 10);
curr = curr->next;
t /= 10;
}
if(t!=0){
curr->next = new ListNode(t % 10);
}
return root->next;
}
};
最后
以上就是甜蜜荷花为你收集整理的(leetcode 2) 两数相加 C++的全部内容,希望文章能够帮你解决(leetcode 2) 两数相加 C++所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复