原题链接:2. 两数相加
题目分析:
本题简单,需要求出给出的两组数之和,主要难点在于给定我们的数是链表的形式。对于一般的链表题我们都可以创建虚拟头结点,方便我们做题。
代码:
/**
* 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); //创建虚拟头节点
ListNode *cur = dummy; //创建遍历指针
int t = 0;
while(t || l1 != nullptr || l2 != nullptr){
if(l1 != nullptr) t += l1->val,l1 = l1->next;
if(l2 != nullptr) t += l2->val,l2 = l2->next;
cur->next = new ListNode(t % 10);
cur = cur->next;
t /= 10;
}
return dummy->next;
}
};
t : 进位符,主要处理数字相加发生进位的情况
while循环结束的条件是,两个链表都遍历结束,且进位符也存入新链表