java版本
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pre = new ListNode(0);
ListNode tmp = pre;
int cur = 0;
while(l1!=null || l2!=null){
int n1 = l1!=null?l1.val:0;
int n2 = l2!=null?l2.val:0;
int n = n1+n2+cur;
cur = n/10;
ListNode node = new ListNode(n%10);
tmp.next = node;
tmp = tmp.next;
if(l1!=null){
l1 = l1.next;
}
if(l2!=null){
l2 = l2.next;
}
}
if(cur!=0){
tmp.next = new ListNode(cur);
}
return pre.next;
}
}
C++版本
* 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* pre = new ListNode(0);
ListNode* tmp = pre;
int cur = 0;
while(l1!=nullptr || l2!=nullptr){
int n1 = l1!=nullptr?l1->val:0;
int n2 = l2!=nullptr?l2->val:0;
int n = n1+n2+cur;
cur = n/10;
ListNode* node = new ListNode(n%10);
tmp->next = node;
tmp = tmp->next;
if(l1!=nullptr){
l1 = l1->next;
}
if(l2!=nullptr){
l2 = l2->next;
}
}
if(cur!=0){
tmp->next = new ListNode(cur);
}
return pre->next;
}
};
总结
核心点就是对不足的节点进行补0,这样会省掉很多边界的判断, 另外语言上,C++和java的实现方式基本相同,主要就是访问指针的差异
打卡完成,继续坚持!!!希望友友们监督哈