Untitled
unknown
plain_text
3 years ago
5.6 kB
13
Indexable
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getnode()
{
struct ListNode *newnode;
newnode=(struct ListNode *)malloc(sizeof(struct ListNode));
newnode->val=0;
newnode->next=NULL;
return newnode;
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *temp1,*temp2,*temp3,*l3=NULL;
int v1,v2,v3,n1=0,n2=0,n3=0,carry=0;
while(l1!=NULL && l2!=NULL)
{
temp1=getnode();
v1=(l1->val);
v2=(l2->val);
if(carry==1)
{
v3=v1+v2+carry;
carry=0;
}
else
v3=v1+v2;
if(v3>9)
{
v3=v3-10;
(temp1->val)=(v3);
if((l1->next)||(l2->next))
{
if(l1->next)
{
l1=l1->next;
n1=(l1->val);
}
if(l2->next)
{
l2=l2->next;
n2=(l2->val);
}
n3=n1+n2+1;
n1=0;
n2=0;
temp3=getnode();
//temp1->next=temp3;
if(n3>9)
{
n3=n3-10;
(temp3->val)=n3;
carry=1;
}
else
temp3->val=n3;
temp1->next=temp3;
}
else
{
temp3=getnode();
temp3->val=1;
temp1->next=temp3;
// temp1->next=getnode();
// temp1=temp1->next;
// temp1->val=1;
}
}
else
{
temp1->val=v3;
}
if(l3==NULL)
{
l3=temp1;
}
else
{
temp2=l3;
while(temp2->next!=NULL)
{
temp2=temp2->next;
}
temp2->next=temp1;
}
l1=l1->next;
l2=l2->next;
//free(temp1);
//temp1=temp1->next;
}
while(l1!=NULL || carry==1)
{
temp1=getnode();
if(l1)
v1=(l1->val);
else
{
v1=0;
break;
}
if(carry==1)
{
v1=v1+1;
carry=0;
}
if(v1>9)
{
temp1->val=v1-10;
if(l1->next)
{
l1=l1->next;
n1=(l1->val);
n1=n1+1;
temp3=getnode();
if(n1>9)
{
n1=n1-10;
temp3->val=n1;
carry=1;
}
else
{
temp3->val=n1;
}
temp1->next=temp3;
}
else
{
temp3=getnode();
temp3->val=1;
temp1->next=temp3;
// temp1->next=getnode();
// temp1=temp1->next;
// temp1->val=1;
}
}
else
temp1->val=v1;
if(l3==NULL)
{
l3=temp1;
}
else
{
temp2=l3;
while(temp2->next!=NULL)
{
temp2=temp2->next;
}
temp2->next=temp1;
}
if(l1!=NULL)
l1=l1->next;
// temp1=temp1->next;
}
while(l2!=NULL || carry==1)
{
temp1=getnode();
if(l2)
v1=(l2->val);
else
{
v1=0;
}
if(carry==1)
{
v1=v1+1;
carry=0;
}
if(v1>9)
{
temp1->val=v1-10;
if(l2->next)
{
l2=l2->next;
n1=(l2->val);
n1=n1+1;
temp3=getnode();
if(n1>9)
{
n1=n1-10;
temp3->val=n1;
carry=1;
}
else
{
temp3->val=n1;
}
temp1->next=temp3;
}
else
{
temp3=getnode();
temp3->val=1;
temp1->next=temp3;
// temp1->next=getnode();
//temp1=temp1->next;
// temp1->val=1;
}
}
else
temp1->val=v1;
if(l3==NULL)
{
l3=temp1;
}
else
{
temp2=l3;
while(temp2->next!=NULL)
{
temp2=temp2->next;
}
temp2->next=temp1;
}
if(l2!=NULL)
l2=l2->next;
//temp1=temp1->next;
}
return l3;
}Editor is loading...