*** 之前想的每天刷刷题,写写博客,现在回头看看发现自己很久没有好好写算法题,也没有更新博客了。既然选择了做一个技术人员,一定的内容输出是有必要的。
这会儿刚好比较清闲,兴致来了,打开leetcode和CSDN写点东西~~
不知道从哪开始写,那就从开头写咯!***
两数相加
题目说明:
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
细看题目要求还是比较简单,把两个数相加,这里是两个链表从头到尾对应结点相加,应注意之和可能进位,因为结果的数位可能大于这两数本身,所以构建新结点来存放结果。
//以下是本人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* dummy = new ListNode(-1), *p = dummy;
//dummy作为头结点,p用来遍历新链表的各个结点
int tmp = 0;//记录结点相加后的整数位
while(l1 || l2 || tmp){//只要其中一个不为空循环就继续执行
if(l1){
tmp += l1->val;
l1 = l1->next;
}
if(l2){
tmp += l2->val;
l2 = l2->next;
}
p->next = new ListNode(tmp%10);//构建新结点,余数即为结点的值
p = p->next;
tmp /= 10;//取得进位值
}
return dummy->next;
}
};