LeetCode 第二题两数相加 C语言
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{
int Sum = 0,Carry = 0;
struct ListNode *PL1 = l1,*PL2 = l2;
struct ListNode *NewHead,*P1,*P2;
int Tem1 = l1->val,Tem2 = l2->val;
NewHead = (struct ListNode *)malloc(sizeof (struct ListNode));
P1= NewHead;
P2 = P1;
while((PL1 != NULL) || (PL2 != NULL) || Carry != 0)
{
Sum = Tem1 + Tem2 + Carry;
if(Sum >= 10)
Carry = 1;
else
Carry = 0;
P2->val = Sum % 10;
P1 = (struct ListNode *)malloc(sizeof (struct ListNode));
P2->next = P1;
P2 = P1;
if(PL1 == NULL)
{
Tem1 = 0;
}
else
{
PL1 = PL1->next;
if(PL1 != NULL)
Tem1 = PL1->val;
else
Tem1 = 0;
}
if(PL2 == NULL)
{
Tem2 = 0;
}
else
{
PL2 = PL2->next;
if(PL2 != NULL)
Tem2 = PL2->val;
else
Tem2 = 0;
}
}
P1->next = NULL;
P1= NewHead;
while(P1->next->next != NULL)
{
P1 = P1->next;
}
P2 = P1->next;
free(P2);
P1->next = P1->next->next;
return NewHead;
}