不算难,主要是练基本概念。
/**
* 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* head=NULL;
ListNode* head2=NULL;
int add=0;
while(l1||l2){
int n1=l1?l1->val:0;
int n2=l2?l2->val:0;
int ans=n1+n2+add;
if(!head){
ListNode* L=new ListNode();
L->val=ans%10;
head=L;
head2=L;
}
else{
ListNode* L=new ListNode();
L->val=ans%10;
head2->next=L;
head2=head2->next;
}
add=ans/10;
if(l1){
l1=l1->next;
}
if(l2){
l2=l2->next;
}
}
if(add>0){//假如最高位升了一位
ListNode* L=new ListNode();
L->val=add;
head2->next=L;
}
return head;
}
};
要设两个head,一个用来不动到时候返回,还有一个负责不断建立链表。