Pregunta: Proporcione dos listas vinculadas no vacías para representar dos números enteros no negativos. Entre ellos, sus respectivos dígitos se almacenan en orden inverso, y cada nodo solo puede almacenar un dígito.
Si sumamos estos dos números, se devolverá una nueva lista vinculada para representar su suma.
Puede suponer que ninguno de estos números comienza con 0, excepto el número 0.
Ejemplo:
Entrada: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Salida: 7 -> 0 -> 8
Razón: 342 + 465 = 807
Fuente: LeetCode
Enlace: https: Los
derechos de autor de / /leetcode-cn.com/problems/add-two-numbers es propiedad de Leetcode.com . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.
Código:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *p,*p1,*p2,*p3,*p4,*ppp,*pppp;
p3=l1;
p4=l2;
int flag=0,i=0,j=0;
while(p3!=NULL){
i++;
p3=p3->next;
}
while(p4!=NULL){
j++;
p4=p4->next;
}
if(i==j||i>j){
p=l1;
p1=ppp=l1;
p2=pppp=l2;
}
if(i<j){
p=l2;
p2=ppp=l2;
p1=pppp=l1;
}
while(ppp!=NULL&&pppp!=NULL){
if((ppp->val+pppp->val+flag)/10>0){
int k=ppp->val;
ppp->val=(ppp->val+pppp->val+flag)%10;
flag=(k+pppp->val+flag)/10;
if(i==j||i>j){
p1=ppp;
p2=pppp;
}
if(i<j){
p2=ppp;
p1=pppp;
}
ppp=ppp->next;
pppp=pppp->next;
}else{
ppp->val=ppp->val+pppp->val+flag;
if(i==j||i>j){
p1=ppp;
p2=pppp;
}
if(i<j){
p2=ppp;
p1=pppp;
}
ppp=ppp->next;
pppp=pppp->next;
flag=0;
}
}
if(ppp!=NULL&&flag!=0){
while(ppp!=NULL){
if((ppp->val+flag)/10){
flag=(ppp->val+flag)/10;
ppp->val=(ppp->val+flag)%10;
if(i==j||i>j){
p1=ppp;
p2=pppp;
}
if(i<j){
p2=ppp;
p1=pppp;
}
ppp=ppp->next;
}else{
ppp->val=ppp->val+flag;
flag=0;
if(i==j||i>j){
p1=ppp;
p2=pppp;
}
if(i<j){
p2=ppp;
p1=pppp;
}
ppp=ppp->next;
}
}
}
if(ppp==NULL&&pppp==NULL&&flag!=0){
struct ListNode* pp = (struct ListNode*)malloc(sizeof(struct ListNode));
pp->val=flag;
pp->next=NULL;
if(i==j||i>j)
p1->next=pp;
if(i<j)
p2->next=pp;
}
return p;
}
Por favor corríjame si hay algún error, ¡gracias! ! !