两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
思路
先检索两个链表长度,如果不相等就用0将较短的一个向较长的一个补齐,补完以后将两个链表各位相加,同时定义一个进位符n,如果和大于9则n为1,否则为0,各位相加时加上n
代码
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* l3=new ListNode;
ListNode* p=l1;
ListNode* q=l2;
ListNode* r=l3;
int len1=1;int len2=1;
int n=0;int m=0;
while(p->next!=NULL){
len1++;
p=p->next;
}
while(q->next!=NULL){
len2++;
q=q->next;
}
if(len1<len2){
for(int i=0;i<len2-len1;i++){
p->next=new ListNode;
p->next->val=0;
p=p->next;
}
p->next=NULL;
}
else{
for(int i=0;i<len1-len2;i++){
q->next=new ListNode;
q->next->val=0;
q=q->next;
}
q->next=NULL;
}
p=l1;
q=l2;
while(p!=NULL){
r->next=new ListNode;
m=p->val+q->val+n;
n=m/10;
r->next->val=m%10;
r=r->next;
p=p->next;
q=q->next;
}
if(n==1){
r->next=new ListNode;
r->next->val=1;
r=r->next;
}
r->next=NULL;
return l3->next;
}
};